Подтвердить что ты не робот

Выполняется условие после && всегда оценивается

У меня есть оператор if, который проверяет два условия ниже. Вторая - это функция goodToGo(), поэтому я хочу вызвать ее, если первое условие уже не верно.

$value = 2239;

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

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

Мой вопрос касается условий 2 if $value < 2000 && goodToGo($value). Оценивают ли они оба, или второй оценивается только тогда, когда первая истинна?

Другими словами, следующие 2 блока одинаковы?

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

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

Ответ 1

Нет - второе условие не всегда будет выполняться (что делает ваши примеры эквивалентными).

Операторы 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());

Ответ 2

Да. Два блока одинаковы. PHP, как и большинство (но не всех) языков, использует оценку короткого замыкания для && и ||.

Ответ 3

Два блока одинаковы.

Логические операторы PHP "ленивы", они оцениваются только в том случае, если они необходимы. Следующий код печатает "Hello, world!":

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

Другие логические операторы включают & &, и, или.

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

- популярная идиома.

Ответ 4

второе условие будет проверяться только тогда и только тогда, когда первое верно, поэтому оба утверждения эквивалентны.

Ответ 5

Да, два кода, которые вы дали, эквивалентны. PHP имеет короткое замыкание, поэтому, когда вы используете || и & > , любое выражение после первого только получает оценку, когда это необходимо.

Ответ 6

Всегда привязывайте свой технический язык на свой родной язык. Точно так же, если я говорю вам в устном разговоре, это точно так же: вы спрашиваете = "если я голоден" && Я ем Пиццу "похож на" Если я голоден, то только я ем Пиццу "? Итак, здесь вы можете видеть, что в более поздней фразе сказано, что пока я не голоден, я не ем пиццу, а первая говорит, что я очень веселый, и я ем пиццу. : -)