Il évalue l'opérande de gauche si l'opérande de gauche est truthy, et l'opérande de droite sinon.
En pseudocode,
foo = bar ?: baz;
résout à peu près
foo = bar ? bar : baz;
ou
if (bar) {
foo = bar;
} else {
foo = baz;
}
avec la différence que bar
ne sera évalué une fois.
Vous pouvez également l'utiliser pour faire un « auto-test » de foo
comme le montre l'exemple de code affiché:
foo = foo ?: bar;
Cela affectera bar
-foo
si foo
est nulle 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 operator.
Assurez-vous que la variable entre parenthèses existe bien, sinon vous allez déclencher une erreur. PHP ne supposera pas simplement avoir une valeur de 'null' ou quoi que ce soit. Justin ' – DanMan
Ce qui est marrant, c'est que cette réponse forme une boucle récursive avec l'article Wiki, ce qui n'explique pas complètement pourquoi il s'appelle l' "opérateur Elvis". – fayerth
http://emoticon.wikia.com/wiki/Elvis_Presley –