Il prend la valeur de l'opérande de gauche si l'opérande de gauche est truthy, et l'opérande de droite sinon.
En pseudo-code,
foo = bar ?: baz;
environ décide de
foo = bar ? bar : baz;
ou
if (bar) {
foo = bar;
} else {
foo = baz;
}
avec la différence qu' bar
sera évaluée uniquement une fois.
Vous pouvez également l'utiliser pour faire un "auto-contrôle" de foo
comme le montre l'exemple de code que vous avez posté:
foo = foo ?: bar;
Cela va affecter bar
de foo
si foo
a la valeur null ou falsey, sinon il laissera foo
inchangé.
Quelques exemples:
<?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'
?>
Par ailleurs, il est appelé Elvis opérateur.
![Elvis operator]()