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?

emix
fonte

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.

Pavel Lint
fonte
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.

Ramki
fonte
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();
}
Nicholas Betsworth
fonte
1

Documentos de exemplo :

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