Він оцінює лівий операнд, якщо лівий операнд є правдоподібним , а правий операнд - інакше.
У псевдокоді
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
або щось інше.