Qu'est-ce qu'une affectation de coalescence nulle ?? = opérateur en PHP 7.4

10

Je viens de voir une vidéo sur les prochaines fonctionnalités de PHP 7.4 et j'ai vu ce ??=nouvel opérateur. Je connais déjà l' ??opérateur. En quoi est-ce différent?

emix
la source

Réponses:

10

De la documentation :

Coalesce égal ou ?? = opérateur est un opérateur d'affectation. Si le paramètre gauche est nul, affecte la valeur du paramètre droit à celui de gauche. Si la valeur n'est pas nulle, rien n'est fait.

Exemple:

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

Il s'agit donc simplement d'un raccourci pour attribuer une valeur si elle n'a pas été affectée auparavant.

Pavel Lint
la source
4
Il semble également que nous ayons trouvé une faute de frappe dans les documents officiels. The folloving lines...
Pavel Lint
il n'est pas exact à 100% que les 2 lignes fassent "la même chose", dans le second cas le côté gauche n'est évalué qu'une seule fois, donc c'est plus efficace
the_nuts
7

En PHP 7, cela a été initialement publié, permettant à un développeur de simplifier une vérification isset () combinée à un opérateur ternaire. Par exemple, avant PHP 7, nous pourrions avoir ce code:

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

Lorsque PHP 7 a été publié, nous avons pu écrire ceci à la place:

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

Maintenant, cependant, lorsque PHP 7.4 est sorti, cela peut être encore simplifié:

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

Un cas où cela ne fonctionne pas est si vous cherchez à affecter une valeur à une variable différente, vous ne pourrez donc pas utiliser cette nouvelle option. En tant que tel, bien que cela soit bienvenu, il pourrait y avoir quelques cas d'utilisation limitée.

Ramki
la source
4

L'opérateur d'affectation coalescent nul est un moyen raccourci d'assigner le résultat de l'opérateur coalescent nul.

Un exemple des notes de version officielles :

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

Exemples de documents :

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