Même si vous développez un nouveau programme PHP à grande échelle, vous utiliserez inévitablement des données globales, car certaines données seront utilisées dans différentes parties de votre code. Certaines données globales courantes incluent : les classes de paramètres de programme, les classes de connexion à la base de données, les informations utilisateur, etc. Il existe de nombreuses façons de rendre ces données globales, la plus couramment utilisée étant d'utiliser la déclaration de mot-clé « global », que nous expliquerons en détail plus loin dans l'article.
Le seul inconvénient de l'utilisation du mot-clé "global" pour déclarer des données globales est qu'il s'agit en fait d'une très mauvaise méthode de programmation, et qu'elle entraîne souvent des problèmes plus importants plus tard dans le programme, car les données globales séparent votre code. Les segments de code sont tous liés. ensemble, donc si vous modifiez une partie du code, d'autres parties peuvent mal tourner. Ainsi, s’il existe de nombreuses variables globales dans votre code, l’ensemble de votre programme sera difficile à maintenir.
Cet article montrera comment éviter ce problème de variable globale grâce à différentes techniques ou modèles de conception. Bien sûr, voyons d'abord comment utiliser le mot-clé « global » pour les données globales et comment il fonctionne. Utilisation de variables globales et du mot-clé "global"
PHP définit par défaut certaines variables "Superglobals". Ces variables sont automatiquement globalisées et peuvent être appelées n'importe où dans le programme, comme $_GET et $_REQUEST, etc. Elles proviennent généralement de données ou d'autres données externes, et l'utilisation de ces variables ne pose généralement pas de problèmes car elles ne sont fondamentalement pas accessibles en écriture.
Mais vous pouvez utiliser vos propres variables globales. En utilisant le mot-clé « global », vous pouvez importer des données globales dans la portée locale d'une fonction. Si vous ne comprenez pas le « portée d'utilisation variable », veuillez vous référer aux instructions pertinentes dans le manuel PHP.
Ce qui suit est un exemple de démonstration utilisant le mot-clé « global » :
Ce qui suit est le contenu cité :
<?php
$my_var = 'Bonjour tout le monde' ;
test_global();
fonction test_global() {
// Maintenant en portée locale
// la variable $my_var n'existe pas
// Génère une erreur : "Variable non définie : ma_var"
echo $ma_var;
// Maintenant, importons la variable
global $ma_var;
// Travaux:
echo $ma_var;
}
?>
Comme vous pouvez le voir dans l'exemple ci-dessus, le mot-clé "global" est utilisé pour importer des variables globales. Cela semble bien fonctionner et c'est simple, alors pourquoi nous soucions-nous d'utiliser le mot-clé « global » pour définir des données globales ?
Voici trois bonnes raisons :
1. La réutilisation du code est quasiment impossible
Si une fonction dépend de variables globales, il est quasiment impossible d'utiliser cette fonction dans différents environnements. Un autre problème est que vous ne pouvez pas extraire cette fonction et l'utiliser dans un autre code.
2. Le débogage et la résolution de problèmes sont très difficiles.
Le suivi d'une variable globale est beaucoup plus difficile que le suivi d'une variable non globale. Une variable globale peut être redéfinie dans un fichier d'inclusion obscur, et même si vous disposez d'un très bon éditeur de programme (ou IDE) pour vous aider, cela peut vous prendre plusieurs heures pour découvrir le problème.
3. Il sera très difficile de comprendre ces codes.
Il vous est difficile de comprendre d'où vient une variable globale et à quoi elle sert. Au cours du processus de développement, vous connaîtrez peut-être toutes les variables globales, mais après environ un an, vous risquez d'en oublier au moins certaines. À ce stade, vous regretterez d'avoir utilisé autant de variables globales.
Donc si nous n’utilisons pas de variables globales, qu’utilisons-nous ? Examinons quelques solutions ci-dessous.
Utilisation des paramètres de fonction
Une façon d'arrêter d'utiliser des variables globales consiste simplement à transmettre la variable en tant que paramètre à la fonction, comme indiqué ci-dessous :
Voici le contenu de la citation :
<?php
$var = 'Bonjour tout le monde' ;
tester ($var);
test de fonction ($var) {
écho $var;
}
?>
Si vous avez seulement besoin de transmettre une variable globale, alors c'est une très bonne solution, voire une solution exceptionnelle, mais que se passe-t-il si vous souhaitez transmettre plusieurs valeurs ?
Par exemple, supposons que nous souhaitions utiliser une classe de base de données, une classe de paramètres de programme et une classe d'utilisateurs. Dans notre code, ces trois classes sont utilisées dans tous les composants, elles doivent donc être transmises à chaque composant. Si nous utilisons la méthode des paramètres de fonction, nous devons faire ceci :
Voici le contenu cité :
<?php
$db = nouvelle DBConnection ;
$settings = nouveau Settings_XML ;
$user = nouvel utilisateur ;
test($db, $settings, $user);
test de fonction(&$db, &$settings, &$user) {
// Faire quelque chose
}
?>
Évidemment, cela n'en vaut pas la peine, et une fois que nous avons de nouveaux objets à ajouter, nous devons ajouter un paramètre de fonction supplémentaire à chaque fonction. Nous devons donc utiliser un autre moyen pour le résoudre.