var foo, bar;
foo = 'hello'; // first
bar = 'world'; // otherwise
var baz = foo || bar;
console.log(baz);
Интересно, каков PHP способ сделать выше? Я уже знаю о ternary
оператор:
$foo = $bar = '';
$foo = 'hello'; // first
$bar = 'world'; // otherwise
$baz = $foo ? $foo : $bar;
echo $baz;
.. но я хочу оптимизировать здесь, потому что $foo
в моем случае это запрос MySQL, и я считаю, что он выполняется дважды (?) при проверке, а затем при назначении. В любом случае, я хочу знать, есть ли более элегантный СУХОЙ способ сделать это.
Редактировать:
В PHP7 вы можете сделать:
$baz = $foo ?? $bar;
… но ищет что-то в PHP 5+
Для этого конкретного случая PHP предоставляет ?:
сокращение, которое оценивает условие только один раз:
$baz = $foo ?: $bar;
Но помимо этого это функционально эквивалентно $foo ? $foo : $bar
,
РЕДАКТИРОВАТЬ: $foo ?? $bar
только когда $foo
может быть null
, Этот оператор доступен только с PHP 7. ?:
однако доступен начиная с PHP 5.3. Троичный будет проверять на false
(Слабо).
Других решений пока нет …