¿Qué es la asignación de fusión nula ?? = operador en PHP 7.4

10

Acabo de ver un video sobre las próximas características de PHP 7.4 y vi este ??=nuevo operador. Ya conozco al ??operador. ¿Cómo es esto diferente?

emix
fuente

Respuestas:

10

De los documentos :

Coalesce igual o ?? = operador es un operador de asignación. Si el parámetro izquierdo es nulo, asigna el valor del parámetro derecho al izquierdo. Si el valor no es nulo, no se hace nada.

Ejemplo:

// The folloving lines are doing the same
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names, the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';

Entonces, básicamente es solo una abreviatura para asignar un valor si no se ha asignado antes.

Pelusa Pavel
fuente
44
También parece que encontramos un error tipográfico en los documentos oficiales. The folloving lines...
Pavel Lint
no es 100% exacto que las 2 líneas estén haciendo "lo mismo", en el segundo caso, el lado izquierdo solo se evalúa una vez, por lo que es más eficiente
the_nuts
7

En PHP 7, esto se lanzó originalmente, lo que permite a un desarrollador simplificar una verificación isset () combinada con un operador ternario. Por ejemplo, antes de PHP 7, podríamos tener este código:

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');

Cuando se lanzó PHP 7 , pudimos escribir esto como:

$data['username'] = $data['username'] ?? 'guest';

Ahora, sin embargo, cuando se lanza PHP 7.4 , esto se puede simplificar aún más en:

$data['username'] ??= 'guest';

Un caso en el que esto no funciona es si está buscando asignar un valor a una variable diferente, por lo que no podrá utilizar esta nueva opción. Como tal, aunque esto es bienvenido, puede haber algunos casos de uso limitado.

Ramki
fuente
4

El operador de asignación de fusión nula es una forma abreviada de asignar el resultado del operador de fusión nula.

Un ejemplo de las notas oficiales de la versión :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Nicholas Betsworth
fuente
1

Documentos de ejemplo :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Dmitry
fuente