Che cos'è l'assegnazione null coalescenza ?? = operatore in PHP 7.4


10

Ho appena visto un video sulle prossime funzionalità di PHP 7.4 e ho visto questo ??=nuovo operatore. Conosco già l' ??operatore. Come è diverso?

Risposte:


10

Dai documenti :

Coalesce uguale o ?? = operatore è un operatore di assegnazione. Se il parametro left è null, assegna il valore del parametro destro a quello sinistro. Se il valore non è nullo, non viene fatto nulla.

Esempio:

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

Quindi in pratica è solo una scorciatoia per assegnare un valore se non è stato assegnato prima.


4
Sembra anche che abbiamo trovato un refuso nei documenti ufficiali. The folloving lines...
Pavel Lint,

non è esatto al 100% che le 2 linee facciano "lo stesso", nel secondo caso il lato sinistro viene valutato solo una volta, quindi è più efficiente
the_nuts

7

In PHP 7 questo è stato originariamente rilasciato, consentendo a uno sviluppatore di semplificare un controllo isset () combinato con un operatore ternario. Ad esempio, prima di PHP 7, potremmo avere questo codice:

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

Quando è stato rilasciato PHP 7 , abbiamo avuto la possibilità di scrivere questo come:

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

Ora, tuttavia, quando PHP 7.4 viene rilasciato, questo può essere ulteriormente semplificato in:

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

Un caso in cui ciò non funziona è se stai cercando di assegnare un valore a una variabile diversa, quindi non potresti utilizzare questa nuova opzione. Pertanto, benché ciò sia positivo, potrebbero esserci alcuni casi d'uso limitati.


4

L'operatore di assegnazione di coalescenza null è un modo abbreviato di assegnare il risultato dell'operatore di coalescenza null.

Un esempio dalle note di rilascio ufficiali :

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

1

Documenti di esempio :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.