Was ist eine Null-Koaleszenz-Zuweisung? = Operator in PHP 7.4

10

Ich habe gerade ein Video über kommende PHP 7.4-Funktionen gesehen und diesen ??=neuen Operator gesehen. Ich kenne den ??Betreiber bereits. Wie ist das anders?

emix
quelle

Antworten:

10

Aus den Dokumenten :

Coalesce gleich oder ?? = Operator ist ein Zuweisungsoperator. Wenn der linke Parameter null ist, weist er dem linken den Wert des rechten Parameters zu. Wenn der Wert nicht null ist, wird nichts unternommen.

Beispiel:

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

Es ist also im Grunde nur eine Abkürzung, einen Wert zuzuweisen, wenn er zuvor noch nicht zugewiesen wurde.

Pavel Lint
quelle
4
Sieht auch so aus, als hätten wir einen Tippfehler in den offiziellen Dokumenten gefunden. The folloving lines...
Pavel Lint
Es ist nicht 100% genau, dass die beiden Zeilen "dasselbe" tun. Im zweiten Fall wird die linke Seite nur einmal ausgewertet, daher ist es effizienter
the_nuts
7

In PHP 7 wurde dies ursprünglich veröffentlicht, sodass ein Entwickler eine isset () - Prüfung in Kombination mit einem ternären Operator vereinfachen kann. Zum Beispiel könnten wir vor PHP 7 diesen Code haben:

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

Als PHP 7 veröffentlicht wurde, konnten wir dies stattdessen wie folgt schreiben:

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

Wenn jedoch PHP 7.4 veröffentlicht wird, kann dies noch weiter vereinfacht werden in:

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

Ein Fall, in dem dies nicht funktioniert, ist, wenn Sie einer anderen Variablen einen Wert zuweisen möchten, sodass Sie diese neue Option nicht verwenden können. Obwohl dies begrüßt wird, kann es einige begrenzte Anwendungsfälle geben.

Ramki
quelle
4

Der Null-Koaleszenz-Zuweisungsoperator ist eine Kurzform zum Zuweisen des Ergebnisses des Null-Koaleszenz-Operators.

Ein Beispiel aus den offiziellen Versionshinweisen :

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

Beispiel Text & Tabellen :

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