[Php] && 뒤에 오는 조건은 항상 평가됩니까?


Answers

아니요 - 두 번째 조건이 항상 실행되지는 않습니다 (이는 귀하의 사례를 동등하게 만듭니다).

PHP의 && , || , and or 연산자는 "단락 회로"연산자로 구현됩니다. 전체 조건에 대한 결과를 강요하는 조건이 발견되자 마자 후속 조건의 평가가 중단됩니다.

http://www.php.net/manual/en/language.operators.logical.php에서

// --------------------
// foo() will never get called as those operators are short-circuit

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());
Question

아래의 두 가지 조건을 테스트하는 if 문이 있습니다. 두 번째 함수는 goodToGo() 함수이므로 첫 번째 조건이 이미 참이 아니라면 호출하고 싶습니다.

$value = 2239;

if ($value < 2000 && goodToGo($value)){
   //do stuff
}

function goodToGo($value){
   $ret = //some processing of the value
   return $ret; 
}

내 질문은 조건 2 $value < 2000 조건에 대한 것입니다 $value < 2000 && goodToGo($value) . 그들은 둘 다 평가를 받습니까? 아니면 두 번째 평가는 첫 번째 평가가 사실 일 때 평가됩니까?

즉, 다음과 같은 두 개의 블록이 동일합니까?

if($value < 2000 && goodToGo($value)) {
   //stuff to do
}

if($value < 2000) {
    if (goodToGo($value)){
       //stuff to do
    }
}



예. 두 블록은 동일합니다. PHP는 대부분의 언어 (모든 언어는 아님)와 마찬가지로 &&|| 대한 단락 회로 평가 를 사용합니다. .




두 번째 조건은 첫 번째 조건이 참인 경우에만 검사되므로 두 문은 동일합니다.




네, 당신이 준 코드 블록 2 개는 동등합니다. PHP가 단락되어 있으므로 || 및 &&, 첫 번째 이후의 모든 문은 필요한 경우에만 평가됩니다.




기술 언어를 자신의 언어로 항상 핵심어로 작성하십시오. 마찬가지로 여기에서 말하기 대화에서 말하면 다음과 같습니다 : "배고프다면 &"나는 피자를 먹고 있습니다 "라고 묻는 것은"내가 배가 고프면 다음 나는 피자를 먹고있다 "? 그래서 여기에서 나중의 구절은 내가 배가 고프지 않을 때까지 나는 피자를 먹지 않는다고 말합니다. 그리고 전은 내가 뚱뚱하다는 것을 말하고 피자를 먹고 있습니다. :-)




두 블록은 같습니다.

PHP 논리 연산자는 "게으른"것으로, 필요한 경우에만 평가됩니다. 다음 코드는 "Hello, world!"를 인쇄합니다.

<?php
$a = 10;
isset($a) || die ("variable \$a does not exist.");
print "Hello, world!"
?>

다른 논리 연산자에는 &&, and, or가 있습니다.

<?php
perform_action() or die ('failed to perform the action');
?>

인기있는 관용어입니다.