?: operador (el 'operador de Elvis') en PHP
Vi esto hoy en algún código PHP:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
No estoy familiarizado con el ?:
operador que se utiliza aquí. Parece un operador ternario, pero se ha omitido la expresión para evaluar si el predicado es verdadero. ¿Qué significa?
Evalúa el operando izquierdo si el operando izquierdo es verdadero y el operando derecho en caso contrario.
En pseudocódigo,
foo = bar ?: baz;
resuelve aproximadamente a
foo = bar ? bar : baz;
o
if (bar) {
foo = bar;
} else {
foo = baz;
}
con la diferencia de que bar
sólo será evaluado una vez.
También puedes usar esto para hacer una "autoverificación" foo
como se demuestra en el ejemplo de código que publicaste:
foo = foo ?: bar;
Esto se asignará bar
a foo
si foo
es nulo o falso; de lo contrario, se dejará 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'
var_dump('' ?: 'roll'); // 'roll'
var_dump('0' ?: 'roll'); // 'roll'
var_dump('42' ?: 'roll'); // '42'
?>
Por cierto, se llama operador de Elvis .
Ver los documentos :
Desde PHP 5.3, es posible omitir la parte central del operador ternario. La expresión
expr1 ?: expr3
regresaexpr1
siexpr1
se evalúa comoTRUE
yexpr3
en caso contrario.