Duplicata possible: Quels sont les opérateurs PHP "?" Et ":" appelés et que font-ils?) ils le font?
<?PHP
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
throw new Exception('Error');
$c();
?>
Twitto utilise plusieurs nouvelles fonctionnalités disponibles à partir de PHP 5.3:
Que fait le numéro 2 avec le ?: dans PHP 5.3?
De plus, que signifient-ils par fonctions anonymes? N'est-ce pas quelque chose qui existe depuis un certain temps?
?:
est une forme de l'opérateur conditionnel qui n'était auparavant disponible que sous la forme:
expr ? val_if_true : val_if_false
Dans 5.3, il est possible de laisser de côté la partie centrale, par ex. expr ?: val_if_false
ce qui équivaut à:
expr ? expr : val_if_false
Depuis le manuel :
Depuis PHP 5.3, il est possible de laisser de côté la partie centrale de l'opérateur conditionnel. Expression
expr1 ?: expr3
résultatsexpr1
siexpr1
correspond àTRUE
etexpr3
autrement.
Le ?:
L'opérateur est opérateur conditionnel (souvent appelé opérateur ternaire):
L'expression
(expr1) ? (expr2) : (expr3)
correspond àexpr2
siexpr1
est évalué à [~ # ~] vrai [~ # ~] etexpr3
siexpr1
est évalué à [~ # ~] false [~ # ~] .
Dans le cas de:
expr1 ?: expr2
L'expression prend la valeur de expr1
si expr1
est vrai et expr2
autrement:
Depuis PHP 5.3, il est possible de laisser de côté la partie médiane de l'opérateur ternaire. Expression
expr1 ?: expr3
résultatsexpr1
siexpr1
est évalué à [~ # ~] vrai [~ # ~] etexpr3
autrement.
Depuis PHP 5.3, il est possible de laisser de côté la partie centrale de l'opérateur ternaire. Expression expr1?: Expr3 renvoie expr1 si expr1 est évalué à TRUE, et expr3 sinon.
Fonctions anonymes: Non, elles n'existaient pas avant 5.3. (voir la première note ci-dessous les exemples), à moins de cette façon:
function ($arg) { /* func body */ }
La seule façon était create_function()
, qui est plus lente, assez encombrante et sujette aux erreurs (en raison de l'utilisation de chaînes pour les définitions de fonction).