Je ne peux pas accéder aux superglobaux via des variables variables dans une fonction. Suis-je la source du problème ou est-ce une des subtilités de PHP? Et comment le contourner?
$g_var = '_GET'; print_r(${$g_var});
3 Réponses :
PHP n'est pas en mesure de reconnaître qu'il s'agit d'un accès mondial de variable: Ceci est également mentionné dans le Docs : p>
Les superglobaux ne peuvent pas être utilisés comme variables variables dans des fonctions ou des méthodes de classe. p>
blockQuote>
Il compile _ get code> et
$ {'_ obtenir'} code> à la même séquence opcode, à savoir un
global code>
fetch_r code>.
$ {$ g_var} code> de l'autre main résultera d'un
local code>
fetch_r code>. p>.
Bien que si vous incluez global $ {$ g_var} code> à l'intérieur de la fonction (comme vous auriez besoin de faire pour une variable globale ordinaire i>), semble fonctionner correctement? Est-ce une solution de contournement viable ou existe-t-il d'autres mises en garde?
Vous pouvez éventuellement le contourner en utilisant , vous pouvez écrire p> et les résultats seront égaux. P> p> $ global code> variable superglobal. Au lieu d'écrire
Il semble que les dernières versions PHP soient correctes avec ce problème. Le code suivant fonctionne bien avec PHP 5.5.9.
<?php function foo() { print_r(${'_SERVER'}); } foo();
(liée) Variables Variables avec des tableaux superglobaux de PHP