2014-05-12 3 views
3

PHP에서 두 개의 연속 된 조건이있는 경우 두 조건 모두 평가되거나 첫 번째 조건이 이미 실패한 경우 취소 된 평가가 취소됩니다 (따라서 두 번째 조건의 결과는 중요하지 않음).)?PHP의 연속 If- 조건

if (condition1 && condition2) { } 
+0

이렇게 두 조건이 모두 true 일 필요가 있습니다. 당신이 || 조건이 사실 일 필요가 있습니다. 첫 번째 조건이 거짓이면 참으로 건너 뜁니다. – kpp

+2

'&&'의 경우 첫 번째 조건이 실패하면 전체 'if'섹션을 건너 뜁니다. 첫 번째가 참이면 두 번째로 이동합니다. 두 번째가 true이면 조건을 입력하고 그렇지 않으면 무시합니다. – asprin

+0

@Nic 가능하면 중복되지만 "단락 회로 평가"라는 용어는 이전에 알려지지 않았습니다. 여기에 대한 답변 덕분에 더 이상 없습니다. – Garrin

답변

2

첫 번째 조건의 결과로 두 번째 조건을 평가하지 않으면 PHP는 두 번째 조건을 평가하지 않습니다 (두 번째 조건). 이를 Short-circuit evaluation라고하며, 용어는 PHP's documentation on logical operators을 의미합니다. 여기

증명할 수 작은 예이다
<?php 

function foo() { 
    echo 'Bar'; 
    return true; 
} 

if (false && foo()) { } 

PHP가 단락 평가를 사용하므로

foo()이 실행되지 않을 것이며, 따라서 Bar이 화면에 출력되지 않는다.

'Test'는 결코 echo이 아니기 때문에 첫 번째 조건이 false 인 경우 두 번째 조건은 평가되지 않습니다.

|| (OR) 사업자와 동일하게 작동하지만, 다른 방법으로 주위 :

<?php 

function foo() { 
    echo 'Bar'; 
    return true; 
} 

if (true || foo()) { } 

첫 번째 조건이 이미 true이기 때문에, 두 번째 평가를 할 필요가 없다. 다시 foo()이 실행되지 않으므로 빈 화면이 표시됩니다.

1

해당 AND. PHP는 게으르다. 첫 번째 함수가 false를 반환하면 다른 함수를 건드리지 않습니다. OR과 동일합니다. PHP를 사용하면 PHP는 게으르며 필요한만큼만 평가됩니다.

if(condition1() || condition2()) 

true 반환 condition1() 경우, 조건 2는 그대로 될 것입니다. 당신이 &&을 사용하고 있기 때문에 왼쪽 조건이 바로 사람이 늘

을 평가하지 않을 경우
if (statement1 && statement2) 
{ 
    //If the left part is false, the right part is not even checked 
} 


if (statement1 || statement2) 
{ 
    //if the left part is false, the right part is checked 
} 
3

을 알고 그것의 좋은 따라서 첫 번째 조건이 거짓 일 경우 두 번째 조건은 평가되지 않습니다.

11

PHP는 Short Circuit Evaluation를 사용 ^^ 항상이 경우 먼저 빠른 기능을 평가합니다., 성능

+1

좋은 참조 테이블 :} – Kamiccolo

+0

올바른 용어를 사용하는 경우 +1 – Jason

+0

@neelsg 비트 연산자에 대한 부분이 사실이 아닙니다. 둘 다 평가되지만 잘못된 결과가 나올 수 있습니다! 'var_dump (true & 10);'는'int (0)' –