web-dev-qa-db-fra.com

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.

42
Francisc

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
31
reko_t

Eh bien, vous ne devez utiliser les globaux que dans des circonstances limitées, mais pour répondre à votre question:

  1. global est potentiellement légèrement plus rapide (cela fera rarement la différence).
  2. $GLOBALS (Pas $GLOBAL) Est plus lisible, car chaque fois que vous le voyez, vous savez que vous accédez/modifiez une variable globale. Cela peut être crucial pour éviter les bugs désagréables.
  3. À l'intérieur d'une fonction, si vous souhaitez annuler la définition d'une variable globale, vous devez utiliser unset($GLOBALS['varname']), pas global $varname; unset($varname);.

Quant aux points 1 et 2, je vais citation Sara Golemon ici:

Qu'est-ce que cela signifie pour votre utilisation du tableau $GLOBALS? C'est vrai, le mot clé global est techniquement plus rapide. Maintenant, je veux être vraiment clair sur une chose ici. La faible vitesse offerte par l'utilisation de vos globaux comme [variables compilées] localisées doit être sérieusement mise en balance avec la maintenabilité de regarder votre code dans cinq ans et sachant que $foo Vient de la portée mondiale. something_using($GLOBALS['foo']); sera TOUJOURS plus clair pour vous sur la ligne que global $foo; /* buncha code */ something_using($foo); Ne soyez pas penny-sage et livre insensé ..

73
Artefacto

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

3
Lekensteyn

Je dirais qu'il est recommandé de ne pas utiliser Globals en POO, il devrait toujours y avoir une meilleure façon

3
Tokk

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

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

Cependant, si vous utilisez la variable plusieurs fois, l'utilisation de global (ou l'affectation équivalente) est plus rapide, car recherchez une seule fois dans le tableau la clé var.

C'est ça la vitesse. Cependant, la différence de vitesse est vraiment faible et la lisibilité est plus importante. Cependant, différentes personnes ont des préférences différentes en matière de lisibilité - je préfère global, d'autres personnes qui répondent ici préfèrent $GLOBALS, c'est à vous de décider ce qui vous semble le mieux.

0
Mewp