Это не возможно сделать это как в Javascript, но вы можете использовать сокращенную версию трехкомпонентной конструкции:
$c = a() ?: b();
Другой способ заключается в используйте меньший приоритет or
.Это не так красиво, но это на самом деле происходит ближе к тому, как вы можете сделать это в Javascript:
$c = a() or $c = b();
Другой способ представления выше, так что легче понять, это обернуть его в скобках:
($c = a()) or ($c = b());
оператор присваивания =, имеет больший приоритет, чем оператор «или» (не путать его с оператором ||
, хотя), что означает, что часть после or
не будет выполнена, если первая часть Равняется до true
. Это, по существу, такой же, как это:
if ($c = a()) {
// Do nothing
} elseif ($c = b()) {
// Do nothing
}
Оба выражения являются задания, которые оценивают либо true
или false
. Если первое выражение равно true
, то $c
будет a()
. В противном случае второе выражение будет проверено, и потому что это последнее выражение, и потому что после этого ничего не делается, $c
будет просто равен b()
.
В любом случае, это не очень важная проблема. Если вы используете время для беспокойства об эстетике переменной назначения, вы не беспокоитесь о правильных вещах.
'$ c = a()?: B();' –
@Jack: Кажется, это работает: http://phpassist.com/6fcca#2 –