Co to jest zerowe przypisanie koalescencyjne? = Operator w PHP 7.4

9

Właśnie widziałem film o nadchodzących funkcjach PHP 7.4 i widziałem tego ??=nowego operatora. Znam już ??operatora. Czym się to różni?

emiks
źródło

Odpowiedzi:

10

Z dokumentów :

Koalescencja równa lub operator = = jest operatorem przypisania. Jeśli lewy parametr ma wartość null, przypisuje wartość prawego parametru do lewego. Jeśli wartość nie jest równa null, nic się nie dzieje.

Przykład:

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

Więc jest to po prostu skrót do przypisania wartości, jeśli nie została wcześniej przypisana.

Pavel Lint
źródło
4
Wygląda również na to, że znaleźliśmy literówkę w oficjalnych dokumentach. The folloving lines...
Pavel Lint
nie jest w 100% dokładne, że 2 linie robią „to samo”, w drugim przypadku lewa strona jest oceniana tylko raz, więc jest bardziej wydajna
the_nuts
7

W PHP 7 została ona pierwotnie wydana, umożliwiając programistom uproszczenie kontroli isset () w połączeniu z operatorem trójskładnikowym. Na przykład przed PHP 7 możemy mieć ten kod:

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

Kiedy PHP 7 zostało wydane, zamiast tego mogliśmy napisać to jako:

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

Jednak teraz, gdy PHP 7.4 zostanie wydane, można to jeszcze bardziej uprościć:

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

Jednym z przypadków, w którym to nie działa, jest próba przypisania wartości do innej zmiennej, więc nie można użyć tej nowej opcji. W związku z tym, choć jest to mile widziane, może istnieć kilka ograniczonych przypadków użycia.

Ramki
źródło
3

Operator zerowania koalescencji jest skrótowym sposobem przypisywania wyniku operatorowi zerowania koalescencji.

Przykład z oficjalnych informacji o wersji :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Nicholas Betsworth
źródło
1

Przykładowe dokumenty :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
Dmitry
źródło