2014-07-17 3 views
2
var_dump(false and false || true); 
// result: bool(false) 

(false and false || true)이 예상대로 false를 반환합니다.왜 (false 및 false 또는 true)가 true를 반환합니다.

var_dump(false and false or true); 
// result: bool(true) 

그러나 (false and false or true)이 참을 반환합니다. 왜 이런 일이 일어나는지 논리적 인 설명이 없습니다.

+1

난에서 보는 첫 번째 장소는 매뉴얼 가정하자 : 나는 당신이 주위에 브라켓을 추가 할 경우,이 같은 결과를 얻을 것 같아요. [연산자 우선 순위]에 대한 명확한 설명이있는 곳 (http://php.net/manual/en/language.operators.precedence.php) –

+0

http://php.net/manual/en/language.operators.precedence.php –

+1

감사합니다. 나는 뇌에 새겨 져있어 어떤 이유로 든 '||'와 '또는'가 동일하다. –

답변

8

&&|| 우리가 우선 순위에 의해 사업자를 정렬 할 때 당신은

그래서

<?php 
var_dump(false and false || true); 
// eq: false and (true or false) => false 

var_dump(false and false or true); 
// eq: (false and false) or true => true 
1

http://php.net/manual/en/language.operators.precedence.php

에서 PHP 문서에 Operator precedence을 볼 수 있습니다 andor

에 더 높은 우선 순위를 가지고 , 그것 :

&& > || > AND > OR 

귀하의 질문에 대한 답변입니다. ||의 우선 순위는 AND입니다.

나는 당신이, 논리 연산자의 한 '종류'를 사용 &&|| 또는 andor를 사용하는 가정합니다. 그들을 결합하지 마십시오.

0

비록 논리적으로는 ||or이 같지만, 그 선행 조건은 동일하지 않습니다.

||OR보다 우선 순위가 높으므로 두 문장에서 다르게 해석됩니다.

(false and (false || true)); 

또는

(false and (false or true)); 

here