?: operador (el 'operador de Elvis') en PHP

Resuelto alpha_juno asked hace 54 años • 7 respuestas

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?

alpha_juno avatar Jan 01 '70 08:01 alpha_juno
Aceptado

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 barsólo será evaluado una vez.

También puedes usar esto para hacer una "autoverificación" foocomo se demuestra en el ejemplo de código que publicaste:

foo = foo ?: bar;

Esto se asignará bara foosi fooes nulo o falso; de lo contrario, se dejará foosin 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 .

operador de elvis

BalusC avatar Jan 03 '2010 00:01 BalusC

Ver los documentos :

Desde PHP 5.3, es posible omitir la parte central del operador ternario. La expresión expr1 ?: expr3regresa expr1si expr1se evalúa como TRUEy expr3en caso contrario.

Yacoby avatar Jan 03 '2010 00:01 Yacoby