8
votes

Les superglobals ne peuvent pas être accessibles via des variables variables dans une fonction?

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

php

3 Réponses :


12
votes

PHP n'est pas en mesure de reconnaître qu'il s'agit d'un accès mondial de variable:
Il compile _ get et $ {'_ obtenir'} à la même séquence opcode, à savoir un global fetch_r . $ {$ g_var} de l'autre main résultera d'un local fetch_r . .

Ceci est également mentionné dans le Docs :

Les superglobaux ne peuvent pas être utilisés comme variables variables dans des fonctions ou des méthodes de classe.


1 commentaires

Bien que si vous incluez global $ {$ g_var} à l'intérieur de la fonction (comme vous auriez besoin de faire pour une variable globale ordinaire ), semble fonctionner correctement? Est-ce une solution de contournement viable ou existe-t-il d'autres mises en garde?



1
votes

Vous pouvez éventuellement le contourner en utilisant $ global variable superglobal. Au lieu d'écrire xxx

, vous pouvez écrire xxx

et les résultats seront égaux.


0 commentaires

0
votes

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


0 commentaires