делает условие после того, как && всегда будут оценены

У меня есть это 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
    }
}
44
задан worldofjr 14 January 2016 в 11:48
поделиться

6 ответов

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

Операторы 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());
82
ответ дан 26 November 2019 в 21:58
поделиться

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

1
ответ дан 26 November 2019 в 21:58
поделиться

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

2
ответ дан 26 November 2019 в 21:58
поделиться

Эти два блока ОДИНАКОВЫ.

Логические операторы 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');
?>

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

3
ответ дан 26 November 2019 в 21:58
поделиться

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

6
ответ дан 26 November 2019 в 21:58
поделиться

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

0
ответ дан 26 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: