Maison  >  Article  >  développement back-end  >  Pourquoi envelopper un appel de fonction entre parenthèses le transforme-t-il en une expression en PHP ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 07:45:02411parcourir

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();

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!

Déclaration:
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