PHP에서 은 false
으로 표시되고 'hi'
으로 인쇄되지 않는 이유는 무엇입니까? 논리적 연산자가 단락 회로에서 평가되는 것을 알고 있습니다 (그들은 입니다). 그러나 &&
과 upper precedence은 and
이므로, (true && print('hi'))
을 먼저 평가해야합니다.false 및 (true && print ('hi'))
실마리가 있습니까? 감사!
PHP에서 은 false
으로 표시되고 'hi'
으로 인쇄되지 않는 이유는 무엇입니까? 논리적 연산자가 단락 회로에서 평가되는 것을 알고 있습니다 (그들은 입니다). 그러나 &&
과 upper precedence은 and
이므로, (true && print('hi'))
을 먼저 평가해야합니다.false 및 (true && print ('hi'))
실마리가 있습니까? 감사!
실제로는 평가 순서를 보여주기 위해 사용하는 좋은 테스트 예제입니다.
왼쪽에서 오른쪽으로 평가가 수행됩니다.
그래서 ... 당신의 예에<?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 & & 대 넣지했지만 동일한 결과를 얻을 수 있습니다.
은 내가 http://php.net/manual/en/language.operators.precedence.php에서 다음을 볼 수 있습니다 식을 그룹화하는 방법을
연산자 우선 순위와 만 결정, 그들은 평가의 순서를 지정하지 마십시오. PHP는 (일반적으로) 표현식이 평가되는 순서를 지정하지 않으며 특정 버전의 평가를 피해야하는 코드를 지정하지 않아야합니다. 이는 PHP 버전간에 또는 주변 코드에 따라 동작이 변경 될 수 있기 때문입니다.
print('one') and (1 + print('two'))
그것은 인쇄 :
그래서, 나는 다음과 같은 테스트
onetwo
그래서 PHP 먼저 평가합니다 and
의 왼쪽 피연산자도 +
가 더 높은 우선 순위, 심지어 괄호를 사용하여이있다 . 흥미 롭 군!
모두에게 감사드립니다.
@CBroe 동일하지 않습니다. 연산자 우선 순위를 고려할 때 "true"로 작동하지 않는지 묻습니다. – tan
@ 예. 그렇습니다. _ "질문은 && (또는'와', 다음과 같은) 조건은 항상"거짓과 무언가 "에 대해"아니오 "로 대답하도록 평가됩니다."무언가 "는 필요 이상으로 보지 않습니다. 연산자 우선 순위는 연산자가 표현식의 _result_에 어떤 영향을 주는지를 의미하며 반드시 개별 하위 표현식의 평가 순서는 아닙니다. – CBroe
이 가상의 질문이 왜 나올지 모르겠다. 내가 쫓겨날 것으로 예상되는 회사에서 근무하는 동안이 코드를 작성하면 SO에 투표하지 않을 것이다. –