Il évalue à l'opérande gauche si l'opérande gauche est véridique , et l'opérande droit sinon.
En pseudocode,
foo = bar ?: baz;
résout grosso modo
foo = bar ? bar : baz;
ou
if (bar) {
foo = bar;
} else {
foo = baz;
}
avec la différence qui bar
ne sera évaluée qu'une seule fois.
Vous pouvez également l'utiliser pour effectuer une "auto-vérification" foo
comme illustré dans l'exemple de code que vous avez publié:
foo = foo ?: bar;
Cela affectera bar
à foo
if foo
est null ou falsey, sinon il restera foo
inchangé.
Quelques exemples supplémentaires:
<?php
var_dump(5 ?: 0); // 5
var_dump(false ?: 0); // 0
var_dump(null ?: 'foo'); // 'foo'
var_dump(true ?: 123); // true
var_dump('rock' ?: 'roll'); // 'rock'
?>
Au fait, cela s'appelle l' opérateur Elvis .
null
ou quoi que ce soit. Just sayin '||
. Alorsblah || 'default'
?||
opérateur renvoie toujours un booléen.Voir les documents :
la source
expr2
est arrivé, c'est qu'il a simplement disparu et n'est pas évalué.$this->expensiveComputation() ?: "nope"
n'est pas identique à$this->expensiveComputation() ? $this->expensiveComputation() : "nope"
- expr1 n'est évalué qu'une seule fois.Soyez prudent avec les tableaux. Nous devons écrire une variable de contrôle après
?
, car:Actualisé
De RFC. Dans le futur (en PHP 7) l'opérateur Null Coalesce Operator le fera, par exemple:
la source
Autre considération importante: l'opérateur Elvis interrompt le processus de tokenisation Zend Opcache. J'ai trouvé ça à la dure! Bien que cela ait pu être corrigé dans les versions ultérieures, je peux confirmer que ce problème existe en PHP 5.5.38 (avec Zend Opcache v7.0.6-dev intégré).
Si vous trouvez que certains de vos fichiers «refusent» d'être mis en cache dans Zend Opcache, cela peut être l'une des raisons ... J'espère que cela vous aidera!
la source
Oui, c'est nouveau dans PHP 5.3. Il renvoie soit la valeur de l'expression de test si elle est évaluée comme TRUE, soit la valeur alternative si elle est évaluée comme FALSE.
la source
TRUE
.