with texto strip_tags remove limpiar from eliminar allow all php coding-style conditional-operator language-construct

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



string strip_tags (5)

Vi esto hoy en algunos códigos PHP:

$items = $items ?: $this->_handle->result(''next'', $this->_result, $this);

No estoy familiarizado con el operador ?: Que se usa aquí. Parece un operador ternario, pero se ha omitido la expresión para evaluar si el predicado es verdadero. Qué significa eso?


Evalúa al operando izquierdo si el operando izquierdo es truthy , y el operando derecho si no.

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 la bar solo se evaluará una vez.

También puede usar esto para hacer una "autocomprobación" de foo como se demuestra en el ejemplo de código que publicó:

foo = foo ?: bar;

Esto asignará una bar a foo si foo es nulo o falsey, de lo contrario 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'' ?>

Por cierto, se llama operador de Elvis .


Otra consideración importante: El Operador de Elvis rompe el proceso de tokenización de Zend Opcache. ¡Encontré esto de la manera difícil! Si bien esto puede haberse solucionado en versiones posteriores, puedo confirmar que este problema existe en PHP 5.5.38 (con Zend Opcache incorporado v7.0.6-dev).

Si encuentra que algunos de sus archivos "se niegan" a ser almacenados en caché en Zend Opcache, esta puede ser una de las razones ... ¡Espero que esto ayude!


Sí, esto es nuevo en PHP 5.3. Devuelve el valor de la expresión de prueba si se evalúa como VERDADERO o el valor alternativo si se evalúa como FALSO.


Tenga cuidado con las matrices. Debemos escribir una variable de verificación después ? , porque:

$params = [''param1'' => ''value1'', ''param2'' => ''value2'', ''param3'' => ''value3'',]; $param1 = isset($params[''param1''])?:null; $param2 = !empty($params[''param2''])?:null; $param3 = $params[''param3'']?:null; // get E_NOTICE, if $params[''param3''] eq false var_dump($param1,$param2,$param3); true // would like to expect `value1` true // would like to expect `value2` param3 // properly, but problem above

Actualizado

De RFC. En el futuro (en PHP 7), el operador Null Coalesce Operator lo hará, por ejemplo:

$param1 = $params[''param1''] ?? null; // Equivalent to: $param1 = isset($params[''param1'']) ? $params[''param1''] : null;


Ver los documentos :

Desde PHP 5.3, es posible omitir la parte central del operador ternario. Expresión expr1 ?: expr3 devuelve expr1 si expr1 evalúa como TRUE , y expr3 caso contrario.