У меня есть это if
оператор, который тестирует на эти 2 условия ниже. Второй является функцией goodToGo()
таким образом, я хочу назвать его, если первое условие не уже верно
$value = 2239;
if ($value < 2000 && goodToGo($value)){
//do stuff
}
function goodToGo($value){
$ret = //some processing of the value
return $ret;
}
Мой вопрос о 2 если условия $value < 2000
&&
goodToGo($value)
. Они оба становятся оцененными, или второй только становится оцененным, когда первый верен?
Другими словами, действительно ли следующие 2 блока являются тем же?
if($value < 2000 && goodToGo($value)) {
//stuff to do
}
if($value < 2000) {
if (goodToGo($value)){
//stuff to do
}
}
Нет - второе условие не всегда будет выполняться (что делает ваши примеры эквивалентными).
Операторы PHP &&
, ||
, и
, а также или
реализованы как операторы «короткого замыкания». Как только будет найдено условие, которое приводит к получению результата для общего условия, оценка последующих условий прекращается.
Из 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 имеет короткое замыкание, поэтому при использовании || и &&, любой оператор после первого оценивается только при необходимости.
второе условие будет проверяться только в том случае, если истинно первое, следовательно, оба утверждения эквивалентны.
Эти два блока ОДИНАКОВЫ.
Логические операторы 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');
?>
это популярная идиома.
Да. Два блока одинаковые. PHP, как и большинство (но не все) языков, использует оценку короткого замыкания для &&
и ||
.
Всегда сопоставляйте свой технический язык со своим родным. Аналогично и здесь, если я говорю вам в устной беседе, это примерно так: вы спрашиваете = "если я голоден" && "Я ем пиццу" аналогично "Если Я голоден, тогда только я ем пиццу "? Итак, здесь вы можете видеть, что следующая фраза гласит, что пока я не голоден, я не ем пиццу, а первая говорит, что я голоден и ем пиццу. : -)