Pourquoi les parenthèses modifient-elles la sémantique des appels de fonction en PHP ?

Barbara Streisand
Libérer: 2024-10-28 20:03:02
original
893 Les gens l'ont consulté

 Why do Parentheses Change the Semantics of Function Calls in PHP?

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!