В Javascript используются операторы объединения и дизъюнкции.
Левый операнд возвращается, если его можно оценить как: false, в случае соединения (a && b) или true, в случае дизъюнкции (a || b); в противном случае возвращается правый операнд.
Существуют ли эквивалентные операторы в PHP?
PHP поддерживает оценку короткого замыкания, немного отличающуюся от конкретизации JavaScript. Мы часто видим пример (даже если это не очень хорошая практика) использования оценки короткого замыкания для проверки результата запроса MySQL в PHP:
// mysql_query() returns false, so the OR condition (die()) is executed. $result = mysql_query("some faulty query") || die("Error");
Обратите внимание, что оценка короткого замыкания работает, когда в PHP существует выражение, которое должно оцениваться по обе стороны логического оператора, что приведет к возврату. Затем он выполняет правую сторону только в том случае, если левая сторона ложна. Это отличается от JavaScript:
Просто делать:
$a || $b
вернет логическое значение TRUE
или FALSE
если либо правдиво, либо оба являются ложными. Он НЕ возвратил значение $b
если $a
был ложным:
$a = FALSE; $b = "I'm b"; echo $a || $b; // Prints "1", not "I'm b"
Поэтому, чтобы ответить на вопрос, PHP выполнит логическое сравнение двух значений и вернет результат. Он не вернет первое правдивое значение двух.
Более идиоматично в PHP (если есть такая вещь, как идиоматический PHP), было бы использовать тройную операцию:
$c = $a ? $a : $b; // PHP 5.3 and later supports $c = $a ?: $b; echo $a ?: $b; // "I'm b"
PHP 7 вводит ??
нулевой коалесцирующий оператор, который может действовать как более близкое приближение к соединению. Это особенно полезно, потому что вам не нужно проверять isset()
на клавишах массива левого операнда.
$a = null; $b = 123; $c = $a ?? $b; // $c is 123;