Pourquoi envelopper un appel de fonction entre parenthèses le transforme-t-il en une expression en PHP ?

Barbara Streisand
Libérer: 2024-10-31 07:45:02
original
487 Les gens l'ont consulté

Why Does Wrapping a Function Call in Parentheses Transform it into an Expression in PHP?

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();
Copier après la connexion

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!

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