O que é atribuição coalescente nula ?? = operador no PHP 7.4


10

Acabei de ver um vídeo sobre os próximos recursos do PHP 7.4 e vi esse ??=novo operador. Eu já conheço o ??operador. Como isso é diferente?

Respostas:


10

Dos documentos :

Coalesce igual ou ?? = operador é um operador de atribuição. Se o parâmetro esquerdo for nulo, atribua o valor do parâmetro direito à esquerda. Se o valor não for nulo, nada será feito.

Exemplo:

// 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';

Portanto, é basicamente apenas uma abreviação para atribuir um valor se ele não tiver sido atribuído antes.


4
Também parece que encontramos um erro de digitação nos documentos oficiais. The folloving lines...
Pavel Lint

não é 100% exato que as duas linhas estão fazendo "o mesmo"; no segundo caso, o lado esquerdo é avaliado apenas uma vez, por isso é mais eficiente
the_nuts

7

No PHP 7, isso foi lançado originalmente, permitindo que um desenvolvedor simplificasse uma verificação isset () combinada com um operador ternário. Por exemplo, antes do PHP 7, poderíamos ter este código:

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

Quando o PHP 7 foi lançado, pudemos escrever isso como:

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

Agora, no entanto, quando o PHP 7.4 é lançado, isso pode ser simplificado ainda mais:

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

Um caso em que isso não funciona é se você deseja atribuir um valor a uma variável diferente, portanto, não poderá usar esta nova opção. Como tal, embora isso seja bem-vindo, pode haver alguns casos de uso limitados.


4

O operador de atribuição de coalescência nula é uma maneira abreviada de atribuir o resultado do operador de coalescência nula.

Um exemplo das notas oficiais de lançamento :

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

1

Documentos de exemplo :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.