Parenthèses modifiant la sémantique du résultat de l'appel de fonction
En PHP, placer le résultat d'un appel de fonction entre parenthèses peut modifier sa sémantique, permettant des expressions cela déclencherait autrement des erreurs. Sans documentation explicite sur ce comportement, il peut être difficile de comprendre comment cela fonctionne.
Ce comportement découle de la logique d'analyse du moteur Zend. Lorsque PHP rencontre une liste d'arguments de fonction non vide, il la classe parmi trois possibilités : une expression sans variable, une variable ou une variable passée par référence.
En ajoutant des parenthèses autour de l'appel de fonction, l'argument n'est plus interprété comme un appel de fonction. Cela modifie l'opcode utilisé pour compiler le code, ce qui supprime l'indicateur indiquant un appel de fonction.
De plus, le moteur Zend permet aux non-références avec un nombre de références de 1 d'être traitées comme des références dans certaines situations. Dans l'exemple fourni, le tableau renvoyé par get_array() a un nombre de références de 1, ce qui satisfait cette condition.
Par conséquent, les parenthèses empêchent que l'appel de fonction soit détecté comme tel, et la valeur de retour est traitée comme référence avec un compte de 1, permettant à l'expression reset((get_array())) de fonctionner comme prévu.
Cependant, il est important de noter que ce comportement est considéré comme un bug et ne doit pas être invoqué . La représentation EBNF de la grammaire PHP ne mentionne pas explicitement ce comportement, et s'appuyer sur elle peut conduire à des résultats inattendus.
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!