L'utilisation de variables globales en PHP a été déconseillée en raison de son potentiel à créer du code étroitement couplé, à entraver la flexibilité, et introduire des risques de sécurité. Cet article explique pourquoi global doit être évité, en se concentrant sur un exemple concret, et propose une solution plus efficace basée sur l'injection de dépendances.
Le principal problème avec les variables globales est leur nature implicite. En déclarant une variable comme globale, on crée une dépendance directe sur celle-ci dans toute la base de code. Toute modification apportée au nom ou à la disponibilité de la variable affecte instantanément d'autres parties de l'application. Cette dépendance implicite peut prêter à confusion, en particulier dans les bases de code plus volumineuses, ce qui rend plus difficile la détection des erreurs et la maintenance du code.
Une meilleure approche de la gestion des variables partagées entre différentes parties de une base de code est une injection de dépendances. Cela implique de transmettre explicitement les dépendances requises en tant que paramètres aux fonctions ou aux classes, au lieu de s'appuyer sur des variables disponibles globalement. Ce faisant, les dépendances deviennent explicites et facilement gérables.
Pour illustrer les problèmes liés aux variables globales, considérons un scénario hypothétique dans lequel un tableau de configuration $config est stocké dans un config.php et inclus dans plusieurs pages d’une application. Dans une fonction conversion() spécifique, la déclaration globale $config devient nécessaire pour accéder aux données de configuration.
function conversion($Exec, $Param = array(), $Log = '') { global $config; $cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec; foreach ($Param as $s) { $cmd .= ' ' . $s; } }
En adoptant l'injection de dépendances, nous pouvons transmettre le tableau $config directement à la fonction conversion() comme un argument, éliminant le besoin de global.
function conversion($Exec, $Param = array(), $Log = '', $config) { $cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec; foreach ($Param as $s) { $cmd .= ' ' . $s; } }
Désormais, la fonction conversion() devient plus modulaire et moins dépendante des variables globales. Il peut être utilisé dans d'autres parties de l'application sans nécessiter l'inclusion du fichier config.php ou la déclaration globale $config.
Le scénario peut être encore étendu pour démontrer l’injection de dépendances avec les connexions de base de données. Supposons que nous ayons une classe Database et une méthode loadConfigurationFromDatabase(), qui récupère les données de configuration d'une base de données.
class Database { // ... public function loadConfigurationFromDatabase() { // ... return $config; } }
Pour accéder aux données de configuration à l'aide de l'injection de dépendances, nous pouvons transmettre une instance de la classe Database à une fonction ou une classe, et appelez loadConfigurationFromDatabase() pour obtenir le tableau de configuration.
// ... $db = new Database(); $config = $db->loadConfigurationFromDatabase(); // ...
Cette approche sépare proprement la connexion à la base de données et le processus de chargement de la configuration du reste du code de l'application, le rendant plus maintenable et testable.
En conclusion, même si les variables globales peuvent sembler pratiques, elles introduisent des dépendances implicites et limitent la flexibilité du code. En adoptant l'injection de dépendances, les développeurs peuvent promouvoir le code découplé, améliorer la modularité et améliorer la qualité globale des logiciels. S'engager sur cette voie mène à des bases de code plus claires, plus maintenables et extensibles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!