Valuta l'operando di sinistra se l'operando di sinistra è truthy e l'operando di destra in caso contrario.
In pseudocodice,
foo = bar ?: baz;
risolve all'incirca
foo = bar ? bar : baz;
o
if (bar) {
foo = bar;
} else {
foo = baz;
}
con la differenza che bar
saranno valutate solo una volta.
È anche possibile utilizzare questo per fare un "self-check" della foo
come dimostra l'esempio di codice che avete inviato:
foo = foo ?: bar;
Questo assegnerà bar
-foo
se foo
è nulla o Falsey, altrimenti lascerà foo
invariato.
Alcuni altri esempi:
<?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'
?>
Tra l'altro, si chiama il Elvis operator.
![Elvis operator](https://i.stack.imgur.com/hQlrps.png)
Assicurati che la variabile tra parentesi esista, o che stai per generare un errore. PHP non supporterà solo che abbia un valore di 'null' o altro. Basta dire ' – DanMan
Ciò che è divertente è che questa risposta forma un ciclo ricorsivo con l'articolo Wiki, che non spiegava pienamente perché è chiamato "operatore Elvis". – fayerth
http://emoticon.wikia.com/wiki/Elvis_Presley –