Evalúa al operando izquierdo si el operando izquierdo es truthy, y el operando derecho de lo contrario.
En pseudocódigo,
foo = bar ?: baz;
resuelve más o menos a
foo = bar ? bar : baz;
o
if (bar) {
foo = bar;
} else {
foo = baz;
}
con la diferencia que bar
sólo se evalúa una vez.
También puede usar esto para hacer un "auto-check" de foo
como se demuestra en el ejemplo código que envió:
foo = foo ?: bar;
Esto asignará bar
a foo
si foo
es nulo o Falsey-, de lo contrario saldrá de foo
sin cambios.
Algunos ejemplos más:
<?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'
?>
Por cierto, se llama la Elvis operator.
Asegúrate de que la variable entre paréntesis existe, o vas a generar un error. PHP no solo asumirá que tiene un valor de 'null' o algo así. Solo digo – DanMan
Lo curioso es que esta respuesta forma un ciclo recursivo con el artículo de Wiki, que no explicaba por qué se llamaba el "operador de Elvis". – fayerth
http://emoticon.wikia.com/wiki/Elvis_Presley –