Parenthèses transformant le résultat d'un appel de fonction en expression
En PHP, mettre le résultat d'un appel de fonction entre parenthèses peut étonnamment transformer le résultat en un полноценное выражение, comme le montre l'exemple suivant :
<?php function get_array() { return array(); } function foo() { return reset((get_array())); } foo();
Le code ci-dessus fonctionne sans erreur, bien qu'il n'y ait aucune explication claire dans la documentation. Examinons ce comportement en détail.
Première condition : argument d'appel sans fonction
En raison des parenthèses ajoutées, PHP n'identifie plus l'argument comme un appel de fonction mais comme "expr_without_variable". Ce changement dans l'analyse affecte la façon dont le code est compilé, supprimant finalement l'indicateur « appel de fonction » de l'opcode « SEND_VAR_NO_REF ».
Deuxième condition : nombre de références de 1
Le Zend Engine autorise occasionnellement les non-références avec un nombre de références de 1 là où des références sont attendues. Dans cet exemple, le tableau renvoyé a un nombre de références de 1, remplissant cette condition. Cependant, si le tableau était référencé ailleurs, la deuxième condition ne serait pas remplie, ce qui entraînerait une erreur.
Conclusion
Bien que ce comportement puisse sembler pratique, il est Il est essentiel de noter qu'il ne s'agit pas d'une fonctionnalité documentée et qu'elle doit être traitée comme un bug possible. S'y fier peut introduire des erreurs inattendues et une instabilité dans le code. Par conséquent, il est fortement recommandé d'éviter cette syntaxe et d'utiliser plutôt l'expression correcte pour éviter toute ambiguïté et garantir des résultats prévisibles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!