web-dev-qa-db-fra.com

Qu'est-ce que c'est?: In PHP 5.3?

Duplicata possible: Quels sont les opérateurs PHP "?" Et ":" appelés et que font-ils?) ils le font?

De http://twitto.org/

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

  1. La constante [~ # ~] dir [~ # ~]
  2. L'opérateur
  3. Fonctions anonymes

  1. Que fait le numéro 2 avec le ?: dans PHP 5.3?

  2. De plus, que signifient-ils par fonctions anonymes? N'est-ce pas quelque chose qui existe depuis un certain temps?

82
JasonDavis

?: 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ésultats expr1 si expr1 correspond à TRUE et expr3 autrement.

134
Ben James

Le ?: L'opérateur est opérateur conditionnel (souvent appelé opérateur ternaire):

L'expression (expr1) ? (expr2) : (expr3) correspond à expr2 si expr1 est évalué à [~ # ~] vrai [~ # ~] et expr3 si expr1 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ésultats expr1 si expr1 est évalué à [~ # ~] vrai [~ # ~] et expr3 autrement.

35
Gumbo

Regardez ici:

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).

5
Boldewyn