목차
∎ 중첩 된 IF가 허용되는 경우 (심지어 양호)
2. 계층 적 비즈니스 논리
3. 작고 얕은 둥지 (1-2 레벨)
nested 중첩 IFS를 피할 때
1. 너무 많은 레벨 (3 중첩)
2. 독립적 인 조건
3. 반복 오류 처리
? 깊은 둥지에 대한 더 나은 대안
✅ 조기 반환 (또는 던지기) 사용
properial 조건을 논리 연산자와 결합합니다
private 개인 방법 또는 검증 클래스로 추출하십시오
✅ 여러 결과에 대한 스위치 명세서 또는 전략 패턴 사용
최종 생각
백엔드 개발 PHP 튜토리얼 건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때

건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때

Jul 31, 2025 pm 12:42 PM
PHP Nested if Statement

명확한 초기 출구가있는 가드 조항, 계층 적 비즈니스 논리 또는 얕은 중첩 (1-2 레벨)과 같은 논리적 인 계층 구조를 반영 할 때 PHP에서는 Nested IF 문이 허용됩니다. 명확성을 높이고 흐름을 유지하기 때문입니다. 2. 깊은 둥지 (3 레벨), 독립적 인 조건 및 반복 오류 처리는 복잡성을 높이고 가독성을 줄이면 피해야합니다. 3. 더 나은 대안에는 조기 반환 또는 평평한 코드에 던지기, 조건을 논리 연산자 (&&, ||)와 결합하고 개인 메소드 또는 유효성 검사 클래스로 논리 추출, 다중 브랜치 결과에 대한 스위치 설명 또는 전략 패턴을 사용하는 것이 포함됩니다. 4. 목표는 유지 관리 가능성을 방해 할 때 명확성과 리팩토링을 향상시킬 때만 중첩을 통해 제어 흐름을 깨끗하게 유지하는 것입니다.

건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때

중첩 if 진술은 PHP의 제어 흐름의 기본 부분이지만 다른 도구와 마찬가지로 과도하게 사용될 때 현명하고 문제가 발생할 때 강력합니다. 블록이 언제 둥지를 if 언제 리팩터를 리팩터 할 때를 아는 것은 깨끗하고 유지 관리 가능하며 디지털 가능한 코드를 작성하는 데 중요합니다.

건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때

S가 PHP에서 의미가 if 중첩 될 때 분해하고 대안에 도달하는 것이 좋습니다.


∎ 중첩 된 IF가 허용되는 경우 (심지어 양호)

진술이 명확성을 향상시키고 조건의 논리적 계층을 반영하는 if 중첩 시나리오가 있습니다.

건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때

1. 명확한 초기 출구로 조항

때로는 진행하기 전에 여러 전제 조건을 검증해야합니다. 둥지는 각 조건이 이전 조건에 의존 할 때 흐름을 직관적으로 만들 수 있습니다.

 if ($ user-> isloggedin ()) {
    if ($ user-> haspermission ( 'edit_post')) {
        if ($ post-> iseditable ()) {
            // 편집을 진행합니다
            $ post-> 편집 ($ data);
        } 또 다른 {
            새로운 예외를 던지십시오 ( '게시물을 편집 할 수 없습니다.');
        }
    } 또 다른 {
        새로운 예외를 던지십시오 ( '허가 거부.');
    }
} 또 다른 {
    리디렉션 ( '/로그인');
}

이 구조는 각 층이 위의 층에 의존하기 때문에 이해할 수 있습니다 . 그러나 여기서도 우리는 더 잘할 수 있습니다 (나중에 더 자세히 설명).

건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때

2. 계층 적 비즈니스 논리

주문 상태 확인과 같은 비즈니스 규칙이 자연스럽게 계층화되면, 지불 자격을 지불 한 다음 배송 자격이있는 경우 중첩은 실제 종속성을 반영 할 수 있습니다.

 if ($ order-> isconfirmed ()) {
    if ($ order-> ispaid ()) {
        if ($ order-> hasinventory ()) {
            $ order-> ship ();
        }
    }
}

다시 읽을 수 있지만 여전히 단순화를 위해 익었습니다.

3. 작고 얕은 둥지 (1-2 레벨)

단일 레벨의 중첩은 일반적으로 괜찮습니다. 논리가 간단한 경우 두 레벨을 허용 할 수 있습니다. 당신이 더 깊이 갈수록 더 어려워지기가 더 어려워집니다.


nested 중첩 IFS를 피할 때

깊게 중첩 된 조건부는 스파게티 코드 , 테스트 가능성 감소 및인지 부하로 이어집니다.

1. 너무 많은 레벨 (3 중첩)

if 문의 3 개 이상의 레벨은 적기입니다. 그들은 코드를 읽고 테스트하기 어렵게 만듭니다.

 if ($ a) {
    if ($ b) {
        if ($ c) {
            if ($ d) {
                // 내가 여기서 뭐하는거야?
            }
        }
    }
}

이것을 종종 "파이라미드의 파이미드"라고합니다. 리팩터를 리팩터 할 때입니다.

2. 독립적 인 조건

조건이 독립적 인 경우 (즉, 서로 의존하지 않으면) 둥지를 틀어야 할 이유가 없습니다.

❌ 나쁘다 :

 if ($ email) {
    if ($ password) {
        if ($ orverccepted) {
            CreateUser ();
        }
    }
}

✅ 더 나은 :

 if (! $ email ||! $ password ||! $ orveraccepted) {
    새로운 예외를 던지십시오 ( '모든 필드가 필요합니다.');
}
CreateUser ();

독립적 인 수표를 논리 연산자와 결합하십시오.

3. 반복 오류 처리

else 블록이 비슷한 일을하는 경우 (예외를 던지거나 로깅을하는 것과 같은) 논리를 반전 해야하는 신호입니다.


? 깊은 둥지에 대한 더 나은 대안

중첩 대신이 깨끗한 패턴을 고려하십시오.

✅ 조기 반환 (또는 던지기) 사용

가장자리 케이스를 먼저 처리하여 구조를 평평하게하십시오.

 function editpost ($ user, $ post) {
    if (! $ user-> isloggedin ()) {
        리디렉션 ( '/로그인');
        반품;
    }

    if (! $ user-> haspermission ( 'edit_post')) {
        새로운 예외를 던지십시오 ( '허가 거부.');
    }

    if (! $ post-> iseditable ()) {
        새로운 예외를 던지십시오 ( '게시물을 편집 할 수 없습니다.');
    }

    $ post-> 편집 ($ data);
}

이제 행복한 길은 둥지없이 깨끗하게 흐릅니다.

properial 조건을 논리 연산자와 결합합니다

적절한 경우 && 사용하여 관련 점검을 붕괴시킵니다.

 if ($ user-> isloggedin () && $ user-> haspermission ( 'edit') && $ post-> isedable ()) {
    $ post-> 편집 ($ data);
} 또 다른 {
    // 거부를 처리합니다
}

줄을 너무 길거나 모호하게 만들지 않도록주의하십시오.

private 개인 방법 또는 검증 클래스로 추출하십시오

복잡한 논리를 작은 작은 방법으로 나눕니다.

 if ($ this-> caneditPost ($ user, $ post)) {
    $ post-> 편집 ($ data);
}

// ...

개인 기능 caneditPost ($ user, $ post) : bool {
    return $ user-> isloggedin ()
        && $ user-> haspermission ( 'edit')
        && $ post-> iseditable ();
}

이는 가독성과 재사성을 향상시킵니다.

✅ 여러 결과에 대한 스위치 명세서 또는 전략 패턴 사용

유형이나 상태를 기준으로 분기하는 경우 계단식 if/else 대신 match , switch 또는 객체 지향 전략을 고려하십시오.

 $ action = match ($ 상태) {
    'draft'=> $ this-> savedraft (),
    '게시 된'=> $ this-> publish (),
    '아카이브'=> 새 예외 던지기 ( '아카이브 된 게시물을 편집 할 수 없음'),
};

최종 생각

진술이 본질적으로 악하지 if 중첩 된 이유는 이유가 있습니다. 그러나 분명한 의도로 얕은 둥지는 좋습니다. 깊고 얽힌 조건부는 그렇지 않습니다.

경험상 :

  • 종속, 계층 적 검사 (최대 1-2 레벨)에 중첩을 사용하십시오.
  • 독립적 인 조건 에 대한 둥지를 피하십시오.
  • 논리가 커지면 조기 반환 , 가드 조항 또는 추출 된 방법을 사용한 리팩토러.
  • 행복한 경로가 중괄호에 묻히지 않는 평평한 선형 코드를 목표로합니다.

깨끗한 제어 흐름은 if 문을 제거하는 것이 아닙니다. 논리를 쉽게 따르고, 테스트하고, 변경하기 쉽게 만드는 것입니다.

기본적으로 : 코드가 더 명확 해지면 둥지가 아니라 할 수 있기 때문입니다.

위 내용은 건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때 건축 제어 흐름 : PHP에서 중첩 된 IF를 사용 (및 피) 할 때 Jul 31, 2025 pm 12:42 PM

NestEdifStatementSAcrectableINPHPPLEGICIERARCHIES, SALLEARDCLAUSES, HIERARCHICALBUSINSESLOGIC, ORSHALLOWNESTING (1-2LEVELS), BECAUSETHEYENHANCECLARITYANDAINTAINTLOW.2.DeepNesting (3 레벨), 독립적 인 Conditions

화살표 코드에서 클린 코드까지 : 중첩 된 IFS를 단순화하기위한 전략 화살표 코드에서 클린 코드까지 : 중첩 된 IFS를 단순화하기위한 전략 Jul 30, 2025 am 05:40 AM

중첩 IF 문의 복잡성을 제거하려면 가드 조항을 사용하여 미리 반환하고 조건부 표현을 병합하고 분기를 다형성 또는 정책 패턴으로 바꾸고 조회 테이블 매핑 값을 사용해야합니다. 1. 가드 조항을 사용하여 경계 조건을 미리 처리하고 종료하십시오. 2. 논리적 작업을 사용하여 충족 및 관련 조건; 3. 다형성 또는 정책 패턴을 사용하여 복잡한 유형 분기를 대체합니다. 4. 사전 및 기타 데이터 구조를 사용하여 간단한 조건부 매핑을 대체합니다. 궁극적으로 코드를 평평하고 선형으로 만들어 가독성과 유지 관리를 향상시킵니다.

PHP Guard Clauses : 중첩 IF 문의 우수한 대안 PHP Guard Clauses : 중첩 IF 문의 우수한 대안 Jul 31, 2025 pm 12:45 PM

guardClausesAreaseAceioraltiveTonestedIfStatementSinphpbecauseTheyReduceCocomplexITITINGLITIONSEARLY

DOOM의 피라미드 조정 : PHP에서 IF 문서 중첩 된 리팩토링 DOOM의 피라미드 조정 : PHP에서 IF 문서 중첩 된 리팩토링 Aug 01, 2025 am 12:33 AM

PHP의 중첩 IF 문으로 인한 "죽음 피라미드"문제를 해결하려면 다음 5 가지 재구성 방법이 채택되어야합니다. 1. 조기 반환 (GuardClauses)을 사용하여 둥지 깊은 둥지를 피하기 위해 조건 검사를 평평하게합니다. 2. 가독성과 재사용 성을 향상시키기 위해 명확한 이름을 가진 개인 방법으로 복잡한 조건을 추출합니다. 3. 복잡한 프로세스를 위해 검증 객체 또는 미들웨어 모드를 사용하여 종합 가능하고 확장 가능한 검증 로직을 달성합니다. 4. 중첩 된 3 가지 표현을 피하기 위해 간단한 시나리오에서만 3 원 또는 빈 병합 연산자를 사용하십시오. 5. 예외를 사용하여 오류 문자열 반환을 대체하고 중앙 집중식 방식으로 오류를 처리하고 코어 로직을 순수하게 유지하십시오. 궁극적 인 목표는 빠른 실패, 논리적 분리 및 적절한 설계 패턴을 통해 코드를 더 안전하고 테스트하기 쉽고 유지하기 쉽게 유지하는 것입니다.

코드 냄새로 중첩 된 IFS : 지나치게 복잡한 논리 식별 및 수정 코드 냄새로 중첩 된 IFS : 지나치게 복잡한 논리 식별 및 수정 Aug 01, 2025 am 07:46 AM

deprynestedifstatementsregnucereadabilitableandincreasecognitiveload

숨겨진 비용 : 깊게 중첩 된 PHP 조건부의 성능 영향 숨겨진 비용 : 깊게 중첩 된 PHP 조건부의 성능 영향 Jul 30, 2025 am 05:37 AM

DeeprynestedConditionalSincreaCecognitivelandanddebuggingTime, MakingCodeHarderToundStandMainTay; REFACTORINGWITHEARLYLETURNSANDANSANDSANDURADCLAUSESSIMPLOW.2.POORSCalabilityAsisAsMoreConditionScomplicateCpubrediction, Dealting, andoptimizatio

중첩 된 if-else 구조를 사용한 효과적인 오류 처리 및 유효성 검사 중첩 된 if-else 구조를 사용한 효과적인 오류 처리 및 유효성 검사 Jul 31, 2025 am 11:59 AM

DeepnestEdif-ElseblocksReduceCodeAdeability 및 Mainability; 2. useArearlyReTurns (GuardClauses) toflattenlogicandimproveClarity; 3.centResultStoseparateConcerNSandSimplifyTesting; 4. ApplyValidationPipPipelinineSeoratorocororatorocorocorocorocorocorocorocorocorocorocorocorocororation

디버깅 지옥 : 구조물을 탐색하고 고정하는 경우 디버깅 지옥 : 구조물을 탐색하고 고정하는 경우 Aug 01, 2025 am 07:33 AM

audeAreceReTurnStoflattennesteDifStructureS 및 handlingedgecasesfirst.2. extractComplexConditionSintodescriptiveBooleanVariAblestOmakeLogics-documenting.3.replacerole-ortype- 기반위원회 TatternSorlookuptablesforlofforleforleforleforledeScriptiveBooleanVariAblestOmakeLogics-documenting.3

See all articles