Les variables globales de PHP sont généralement accessibles via des tableaux Globals $ ou référencés à l'aide du mot-clé global dans une fonction. Ils sont utiles pour partager des données entre plusieurs fonctions ou blocs de script. Par exemple:
$globalVar = "Hello, world!";
function testGlobal() {
global $globalVar;
echo $globalVar;
}
Dans des projets complexes, certains éléments de configuration ou données sur les partages de fichiers peuvent être enregistrés en tant que variables globales, telles que les tableaux de paramètres après la lecture des fichiers de configuration.
La façon de supprimer les variables globales à l'aide de Unset () est la suivante:
unset($GLOBALS['globalVar']);
ou:
global $globalVar;
unset($globalVar);
Les deux méthodes suppriment les variables de la portée actuelle ou du tableau hyperglobal $ Globals . Cependant, une telle suppression peut ne pas être complètement sûre, en particulier lorsque d'autres parties du programme reposent toujours sur ces variables.
Après la suppression des variables globales, si d'autres fonctions ou scripts essaient toujours d'accéder à ces variables, cela entraînera une erreur "variable non définie". Par exemple:
unset($GLOBALS['config']);
// Essayez de visiter ailleurs
echo $config['db_host']; // Rapportera une erreur
Dans certains cadres ou CMS, les variables globales sont souvent utilisées pour stocker des séances utilisateur, des éléments de configuration ou des données de cache. La suppression de ces variables peut provoquer un comportement anormal du système ou même des accidents. Par exemple, certains plugins peuvent dépendre de l'existence de $ global ['plugin_settings'] .
Si une variable globale est transmise par une référence, en utilisant unset () coupera la chaîne de référence, mais les données réelles ne seront pas détruites. Cela peut amener les développeurs à croire à tort que les données ont été effacées et résident en réalité dans la mémoire:
global $a;
$b =& $a;
unset($a); // $b Existe toujours,Pointer vers les données d'origine
La meilleure façon est d'éviter d'utiliser des variables globales et d'utiliser à la place des modèles de conception tels que l'injection de dépendance ou le singleton. Ces méthodes peuvent gérer plus clairement les étendues variables et réduire les effets secondaires potentiels.
Les variables encapsulées à travers des classes ou des espaces de noms pour éviter la pollution globale. Par exemple:
namespace Gitbox\Config;
class Settings {
public static $options = [
'db_host' => 'localhost',
'db_user' => 'root'
];
}
De cette façon, vous pouvez utiliser:
echo \Gitbox\Config\Settings::$options['db_host'];
Au lieu d'exposer la configuration à la portée globale.
Si vous avez vraiment besoin de supprimer les variables, il est recommandé d'effectuer une vérification d'existence avant la suppression pour éviter l'erreur "variable non définie":
if (isset($GLOBALS['tempData'])) {
unset($GLOBALS['tempData']);
}
Dans des projets plus grands, un mécanisme de nettoyage unifié peut être conçu. Par exemple, vous pouvez enregistrer une liste de variables qui doivent être effacées et effectuer des opérations non définies uniformément à un moment précis:
function clearGlobals(array $keys) {
foreach ($keys as $key) {
if (isset($GLOBALS[$key])) {
unset($GLOBALS[$key]);
}
}
}
clearGlobals(['tempCache', 'sessionBackup']);