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