313 votes

?: opérateur (le "Elvis opérateur") en PHP

Je l'ai vu aujourd'hui dans une partie du code PHP:

$items = $items ?: $this->_handle->result('next', $this->_result, $this);

Je ne suis pas familier avec l' ?: opérateur utilisé ici. Il ressemble à un opérateur ternaire, mais l'expression à évaluer si le prédicat est vrai a été omis. Ça veut dire quoi?

635voto

BalusC Points 498232

Il prend la valeur de l'opérande de gauche si l'opérande de gauche est truthy, et l'opérande de droite sinon.

En pseudo-code,

foo = bar ?: baz;

environ décide de

foo = bar ? bar : baz;

ou

if (bar) {
    foo = bar;
} else {
    foo = baz;
}

avec la différence qu' bar sera évaluée uniquement une fois.

Vous pouvez également l'utiliser pour faire un "auto-contrôle" de foo comme le montre l'exemple de code que vous avez posté:

foo = foo ?: bar;

Cela va affecter bar de foo si foo a la valeur null ou falsey, sinon il laissera foo inchangé.

Quelques exemples:

<?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'
?>

Par ailleurs, il est appelé Elvis opérateur.

Elvis operator

67voto

Yacoby Points 29771

Voir les docs:

Depuis PHP 5.3, il est possible de laisser de côté la partie médiane de l'opérateur ternaire. L'Expression expr1 ?: expr3 retours expr1 si expr1 évalue TRUE, et expr3 sinon.

4voto

Atli Points 4288

Oui, c'est nouveau en PHP 5.3. Elle renvoie le résultat de la boolean test de valeur que si elle est évaluée comme VRAIE, ou la valeur de remplacement si elle est évaluée comme FAUSSE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X