52 votes

PHP global ou $ GLOBALS

Existe-t-il une meilleure pratique / recommandation lorsque je souhaite utiliser une variable déclarée en dehors d'une fonction lorsqu'il s'agit d'utiliser:

  1. global $myVar
  2. $GLOBALS['myVar']

Je vous remercie.

83voto

Artefacto Points 50896

Eh bien, vous ne devriez utiliser des variables globales dans des circonstances limitées, mais pour répondre à votre question:

  1. global est potentiellement légèrement plus rapide (il va rarement faire une différence).
  2. $GLOBALS (pas $GLOBAL) est plus lisible, parce que chaque fois que vous la voyez, vous savez que vous êtes d'accéder à la modification d'une variable globale. Cela peut cruciales pour éviter de méchants bugs.
  3. L'intérieur d'une fonction, si vous souhaitez annuler une variable globale, vous devez utiliser unset($GLOBALS['varname']), pas global $varname; unset($varname);.

Comme pour les points 1 et 2, je vais citer Sara Golemon ici:

Qu'est-ce que cela signifie pour votre utilisation de l' $GLOBALS tableau? C'est vrai, l' global mot-clé est techniquement plus rapide. Maintenant, je veux être très clair sur une chose ici. Le mineur de vitesse affordance donné à l'aide de votre globals localisés [données compilées variables] doit être sérieusement pesé à l'encontre de la maintenabilité de regarder votre code dans les cinq ans, et sachant qu' $foo venaient de portée globale. something_using($GLOBALS['foo']); sera TOUJOURS plus clair pour vous sur la ligne de global $foo; /* buncha code */ something_using($foo); Ne soyez pas penny sage et livre stupide..

32voto

reko_t Points 22121

Ce que vous devez vraiment faire, c'est passer la variable à la fonction au lieu d'utiliser un global.

Un exemple comment changer une variable en dehors de la fonction en la passant comme paramètre de référence:

 function myFunc(&$myVar)
{
    $myVar = 10;
}

$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
 

4voto

Lekensteyn Points 22873

J'irais pour global dans le haut de votre fonction. De cette façon, vous pouvez facilement voir quels globaux sont utilisés.

3voto

Tokk Points 2705

Je wold dire, il est recommandé de ne pas utiliser de variables Globales en programmation orientée objet, il devrait toujours y avoir une meilleure façon

0voto

Mewp Points 4475

global $var; est équivalent à $var =& $GLOBALS['var'].

Certaines personnes ont suggéré qu'il est plus rapide que d'utiliser $GLOBALS, cependant elle n'est pas nécessairement le cas. Si vous utilisez la variable qu'une seule fois, $GLOBALS sera plus rapide, car vous ne perdrez pas de temps pour l'affectation.

Toutefois, si vous utilisez la variable à plusieurs reprises, en global (ou l'équivalent d'affectation) est plus rapide, parce que la recherche dans le tableau de l' var touche une seule fois.

Que c'est une question de vitesse. Cependant, la différence de vitesse est vraiment petit, et la lisibilité est plus important. Cependant, différentes personnes ont des préférences différentes sur la lisibilité -- je préfère global, certaines personnes à d'autres de répondre ici préfèrent $GLOBALS, donc c'est à vous de décider ce qui est mieux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X