86 votes

Sont des variables globales en PHP considéré comme une mauvaise pratique? Si oui, pourquoi?

function foo () {
    global $var;
    // rest of code
}

Dans mes petits projets PHP j'ai l'habitude d'aller à la voie procédurale. De manière générale, j'ai une variable qui contient la configuration du système, et quand je nead pour accéder à cette variable dans une fonction, je n' global $var;.

Est-ce une mauvaise pratique?

101voto

cletus Points 276888

Quand les gens parlent de variables globales dans d'autres langues, cela signifie quelque chose de différent de ce qu'il fait en PHP. C'est parce que les variables ne sont pas vraiment mondiale en PHP. La portée typique d'un programme PHP est une requête HTTP. Les variables de Session en réalité ont une portée plus large PHP "global" variables car ils englobent un grand nombre de requêtes HTTP.

Souvent (toujours?) vous pouvez appeler des fonctions de membre dans les méthodes comme preg_replace_callback() comme ceci:

preg_replace_callback('!pattern!', array($obj, 'method'), $str);

Voir les rappels pour plus d'.

Le point est que les objets ont été boulonnés sur PHP et d'une certaine façon conduire à une certaine maladresse.

Ne pas porter trop avec l'application de normes de constructions ou de langues différentes de PHP. Un autre écueil est d'essayer de tourner PHP dans un pur langage de programmation orientée objet en collant des modèles d'objet au-dessus de tout.

Comme toute autre chose, utiliser "global", les variables, le code de procédure, un cadre particulier et de la programmation orientée objet parce qu'il fait sens, résout un problème, réduit la quantité de code à écrire, ou la rend plus facile à gérer et plus facile à comprendre, non pas parce que vous pensez que vous devriez.

27voto

rojoca Points 5454

Les variables globales si pas utilisés avec précaution peuvent créer des problèmes plus difficiles à trouver. Disons que vous demande un script php vous obtenez un avertissement disant que vous essayez d'accéder à un index d'un tableau qui n'existe pas dans la fonction.

Si le réseau auquel vous essayez d'accéder est locale à la fonction, vous vérifiez la fonction pour voir si vous avez fait une erreur. Il pourrait être un problème avec une entrée à la fonction de sorte que vous vérifiez les endroits où la fonction est appelée.

Mais si ce tableau est international, vous devez vérifier tous les endroits où vous utilisez cette variable globale, et non seulement cela, vous devez comprendre dans quel ordre ces références à la variable globale sont accessibles.

Si vous avez une variable globale dans un morceau de code, il est difficile d'isoler les fonctionnalités de ce code. Pourquoi voulez vous isoler de la fonctionnalité? De sorte que vous pouvez le tester et de le réutiliser ailleurs. Si vous avez un peu de code, vous n'avez pas besoin de test et n'aurez pas besoin de les réutiliser ensuite à l'aide de variables globales est très bien.

17voto

Don Dickinson Points 4208

je suis d'accord avec cletus. je voudrais ajouter deux choses:

  1. utiliser un préfixe de sorte que vous pouvez identifier immédiatement comme global (par exemple, $g_)
  2. de les déclarer dans un seul endroit, ne pas aller à saupoudrer partout dans le code.

meilleures salutations, n'

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