2011-07-06 2 views
0

PHP 스크립트에서 다음 코드를 발견했으며 PHP가 오류를보고하지 않는 이유가 궁금합니다. PHP 동일성 검사 오류가 발생하지 않음

$current_name == ($type != 3) ? $name : '' ; 

그것은 오타이고 코드를 읽어했는데 :

$current_name = ($type != 3) ? $name : '' ; 
+0

필자는 ($ type! = 3)? $ name : '')]과 같은 괄호가 필요하지 않지만 $ current_name과 ($ type! = 3)을 효과적으로 비교할 것입니다. – Jauzsika

+2

왜 그것은 그 진술에 아무런 잘못도 없다. 부울 값을 아무데도 반환하지 않습니다. ''var_dump ($ current_name == ($ type! = 3)? $ name : ''); ' – feeela

+0

@... 어떤 이유에서든 인라인 비교는 허용되지 않았지만 아무것도하지 않기 때문에 시도해보십시오. – Jon

답변

3

이 코드는 기괴한 코드이지만 읽을 수없고 쓸모가 없기 때문에 잘못된 코드가 아닙니다. 기본적으로는 형식의 if 구조의 축약 형인 ternary operator을 사용합니다.

  1. 확인 $type != 3 여부 :

    이 코드는 다음을 수행합니다. $type3 인 경우 false을 반환하고 그렇지 않은 경우 true을 반환합니다.

  2. # 1의 결과와 $current_name의 결과를 비교하십시오.
  3. # 2가 true (즉, $current_name == true) 인 경우 $name을 반환합니다. 그렇지 않으면 ($current_name == false) ''을 반환합니다.

물론이 모든 내용은 진술에 지정이 없으므로 아무런 의미가 없습니다.

+0

'($ type! = 3)'에 따라'($ current_name == true)'또는'($ current_name == false)'로 평가하지 않고 '$ name' 또는' ''''$ current_name == x'를 기반으로 무효화할까요? –

+0

@Alexander 예, 당신 말이 맞아요 - 나는'? :'이 [우선 순위] (http://php.net/manual/en/language.operators.precedence.php)가 있다고 생각했습니다. – lonesomeday

3

그것은 올바른 구문입니다. 삼항식이 계산 된 다음 $current_name과 비교됩니다. 전체 식의 결과는 사용되지 않습니다.

관련 문제