Il a été noté dans une autre question que l'encapsulation du résultat d'un appel de fonction en PHP entre parenthèses peut, d'une manière ou d'une autre, convertir le résultat en une expression à part entière, de sorte que ce qui suit fonctionne :
``
J'essaie de trouver dans la documentation une explication explicite et sans ambiguïté de ce qui se passe ici. Contrairement au C++, je ne connais pas suffisamment la grammaire PHP et son traitement des instructions/expressions pour le déduire moi-même.
Y a-t-il quelque chose de caché dans la documentation concernant ce comportement ? Sinon, quelqu'un d'autre peut-il l'expliquer sans recourir à la supposition ?
Mise à jour
J'ai d'abord trouvé cette EBNF prétendant représenter la grammaire PHP, et j'ai essayé de décoder mes scripts moi-même, mais j'ai finalement abandonné.
Ensuite, en utilisant phc
pour générer un fichier .dot
des deux variantes de foo()
, j'ai produit des images AST pour les deux scripts en utilisant les commandes suivantes :
$ yum install phc graphviz
$ phc --dump-ast-dot test1.php > test1.dot
$ dot -Tpng test1.dot > test1.png
$ phc --dump-ast-dot test2.php > test2.dot
$ dot -Tpng test2.dot > test2.png
Dans les deux cas, le résultat était exactement le même :
``