Он оценивает левый операнд, если левый операнд верный , а правый операнд - в противном случае.
В псевдокоде,
foo = bar ?: baz;
грубо решается на
foo = bar ? bar : baz;
или
if (bar) {
foo = bar;
} else {
foo = baz;
}
с той разницей, что bar
будет оцениваться только один раз.
Вы также можете использовать это для «самопроверки», foo
как показано в примере кода, который вы разместили:
foo = foo ?: bar;
Это будет назначать bar
в foo
случае foo
равна нулю или falsey, иначе он оставит foo
без изменений.
Еще несколько примеров:
<?php
var_dump(5 ?: 0); // 5
var_dump(false ?: 0); // 0
var_dump(null ?: 'foo'); // 'foo'
var_dump(true ?: 123); // true
var_dump('rock' ?: 'roll'); // 'rock'
?>
Кстати, это называется оператор Элвиса .
null
или что-то еще. Просто