2012-03-29 3 views
8

왜 작동하지 않습니까? 7 호선{if} if if endif

$a = 0; $b = 1; $c = 3; $d = 4; 
if ($a == $b): 
    if ($b == $c) { 
     // something 
    } 
else: 
    $c = $a; 
endif; 

에 ...하지만 난 그것을 변경하는 경우 (다만 다른 문을 추가) : '': 구문 오류, 예기치 않은 : 구문 분석 오류가 나타납니다

$a = 0; $b = 1; $c = 3; $d = 4; 
if ($a == $b): 
    if ($b == $c) { 
     // something 
    } else { 
     // something 
    } 
else: 
    $c = $a; 
endif; 

그것은 잘 작동합니다.

왜 그럴까요? PHP 버그가 아닙니까? 아니면 내가 알아야 할 것인가에 대한 규칙이 있습니까?

어쨌든 PHP 5.3.3 버전을 사용하고 있습니다.

+0

줄 번호를 붙여주세요. – JAM

+0

http://stackoverflow.com/questions/564130/difference-between-if-and-if-endif – Pheonix

+4

흥미 롭군요. 템플릿 스타일 흐름 규칙적인 명령으로 제어문을 제어하십시오. (또는 HTML 스타일을 코딩하지 않는 한 템플릿 스타일 _at all_을 사용하십시오 ... 그러나 그 의견입니다) –

답변

14

나는이 버그를 호출하면 것인지 잘 모르겠지만, 난 당신이 혼합 된 경우 - 다른 구문과 함께, 때문에 dangling else의이 문제가 발생하는 믿습니다

if ($a == $b):   // 1 
    if ($b == $c) {  // 2 
     // something  // 3 
    }      // 4 
else:      // 5 - this else 
    $c = $a;    // 6 
endif;     // 7 

참고하는 방법 라인 5의 else은 모호합니다. 첫 번째 또는 두 번째 if 문에 속할 수 있습니다.

당신은 쉽게 그 모호성을 제거하고 이후에 세미콜론을 추가하여 구문 오류를 수정 할 수 있습니다 중첩 된 if : 당신은 당신의 동료 프로그래머가 괴롭히다하려는 경우가 아니면

다른 노트에
if ($a == $b):   // 1 
    if ($b == $c) {  // 2 
     // something  // 3 
    };     // 4 - here 
else:      // 5 
    $c = $a;    // 6 
endif;     // 7 

는이 구문을 사용하지 마십시오 당신은 당신의 잠에서 죽음에 이릅니다.

+0

+1에서 노트에 대해 – jprofitt

+0

내가 쓰려고했던 것에 대해. 오직 더 좋다. :) – GolezTrol

+0

조언 해 주셔서 감사합니다. 나는 구문을 혼합하지 않을 것이다. 문제가되는 것은 조금 이상합니다. – user1301744

0

if/else의 콜론 형식은 중첩 된 if를 처리 할 때 모호 할 수 있습니다. 귀하의 예에서 else는 두 번째 if (if이어야합니다.)를 피하기 위해 명시 적으로 인터프리터에게 else가 첫 번째 if와 쌍을 이루는 것을 알리고 두 번째 else에 else를 추가하여 if (if 두 번째 코드 블록에 표시), {}을 사용하여 컨트롤 흐름을 명시 적으로 정의 할 수 있습니다.

즉, 여러 형태의 if 문을 사용할 수 있습니다. 예 :

if (foo): 
    //statements 
else { 
    //statements 
} 

완벽하게 유효합니다. 나는 가독성에서 멀어지기 때문에 양식을 혼합하지 말 것을 권 하겠지만.