2017-10-21 8 views
2

PHP에서 은 false으로 표시되고 'hi'으로 인쇄되지 않는 이유는 무엇입니까? 논리적 연산자가 단락 회로에서 평가되는 것을 알고 있습니다 (그들은 입니다). 그러나 &&upper precedenceand이므로, (true && print('hi'))을 먼저 평가해야합니다.false 및 (true && print ('hi'))

실마리가 있습니까? 감사!

+0

@CBroe 동일하지 않습니다. 연산자 우선 순위를 고려할 때 "true"로 작동하지 않는지 묻습니다. – tan

+2

@ 예. 그렇습니다. _ "질문은 && (또는'와', 다음과 같은) 조건은 항상"거짓과 무언가 "에 대해"아니오 "로 대답하도록 평가됩니다."무언가 "는 필요 이상으로 보지 않습니다. 연산자 우선 순위는 연산자가 표현식의 _result_에 어떤 영향을 주는지를 의미하며 반드시 개별 하위 표현식의 평가 순서는 아닙니다. – CBroe

+2

이 가상의 질문이 왜 나올지 모르겠다. 내가 쫓겨날 것으로 예상되는 회사에서 근무하는 동안이 코드를 작성하면 SO에 투표하지 않을 것이다. –

답변

0

실제로는 평가 순서를 보여주기 위해 사용하는 좋은 테스트 예제입니다.

왼쪽에서 오른쪽으로 평가가 수행됩니다.

그래서 ... 당신의 예에

<?php 

// Evaluates Left to right 
// Prints HI as (true && print('Hi') evaluates as TRUE 
// Then the && FALSE is tested and it fails 
if((true && print('Hi')) && FALSE){ 
    echo 'Success'; 
} else { 
    echo 'Failed'; 
} 

// Evaluates Left to right 
// FALSE is evaluated and Fails 
// No further checking is performed 
if(FALSE && (true && print('Hi'))){ 
    echo 'Success'; 
} else { 
    echo 'Failed'; 
} 

주 뭔가를 추가 : 나는에 AND & & 대 넣지했지만 동일한 결과를 얻을 수 있습니다.

0

은 내가 http://php.net/manual/en/language.operators.precedence.php에서 다음을 볼 수 있습니다 식을 그룹화하는 방법을

연산자 우선 순위와 만 결정, 그들은 평가의 순서를 지정하지 마십시오. PHP는 (일반적으로) 표현식이 평가되는 순서를 지정하지 않으며 특정 버전의 평가를 피해야하는 코드를 지정하지 않아야합니다. 이는 PHP 버전간에 또는 주변 코드에 따라 동작이 변경 될 수 있기 때문입니다.

print('one') and (1 + print('two')) 

그것은 인쇄 :

그래서, 나는 다음과 같은 테스트

onetwo 

그래서 PHP 먼저 평가합니다 and의 왼쪽 피연산자도 +가 더 높은 우선 순위, 심지어 괄호를 사용하여이있다 . 흥미 롭 군!

모두에게 감사드립니다.