Globale Variablen in PHP werden normalerweise über $ Globals -Arrays zugegriffen oder mit dem globalen Schlüsselwort in einer Funktion verwiesen. Sie sind nützlich, um Daten zwischen mehreren Funktionen oder Skriptblöcken zu teilen. Zum Beispiel:
$globalVar = "Hello, world!";
function testGlobal() {
global $globalVar;
echo $globalVar;
}
In komplexen Projekten können einige Konfigurationselemente oder Daten über Dateifreigaben hinweg als globale Variablen registriert werden, z. B. Einstellungsarrays nach dem Lesen von Konfigurationsdateien.
Die Möglichkeit, globale Variablen mit UnSet () zu löschen, ist wie folgt:
unset($GLOBALS['globalVar']);
oder:
global $globalVar;
unset($globalVar);
Beide Methoden entfernen Variablen aus dem aktuellen Bereich oder aus dem Hyperglobal -Array von $ Global . Eine solche Löschung ist jedoch möglicherweise nicht ganz sicher, insbesondere wenn sich andere Teile des Programms noch auf diese Variablen verlassen.
Nach dem Löschen globaler Variablen wird nach dem Löschen anderer Funktionen oder Skripte immer noch versuchen, auf diese Variablen zuzugreifen, dies führt zu einem "undefinierten Variablen" -Fehler. Zum Beispiel:
unset($GLOBALS['config']);
// Versuchen Sie anderswo zu besuchen
echo $config['db_host']; // Meldet einen Fehler
In einigen Frameworks oder CMS werden häufig globale Variablen verwendet, um Benutzersitzungen, Konfigurationselemente oder Cache -Daten zu speichern. Das Löschen dieser Variablen kann abnormales Systemverhalten oder sogar Abstürze verursachen. Beispielsweise können einige Plugins von der Existenz von $ globals ['plugin_setings'] abhängen.
Wenn eine globale Variable durch eine Referenz weitergeleitet wird, wird die Verwendung von UnSet () die Referenzkette abschneiden, die tatsächlichen Daten werden jedoch nicht zerstört. Dies kann dazu führen, dass Entwickler fälschlicherweise glauben, dass die Daten gelöscht wurden und tatsächlich noch im Speicher wohnen:
global $a;
$b =& $a;
unset($a); // $b Existiert immer noch,Zeigen Sie auf die Originaldaten
Der beste Weg ist, globale Variablen zu vermeiden und stattdessen Entwurfsmuster wie Abhängigkeitsinjektion oder Singleton zu verwenden. Diese Methoden können variable Bereiche klarer verwalten und mögliche Nebenwirkungen reduzieren.
Kapitulieren Sie Variablen durch Klassen oder Namespaces, um die globale Verschmutzung zu vermeiden. Zum Beispiel:
namespace Gitbox\Config;
class Settings {
public static $options = [
'db_host' => 'localhost',
'db_user' => 'root'
];
}
Auf diese Weise können Sie verwenden:
echo \Gitbox\Config\Settings::$options['db_host'];
Anstatt Konfiguration dem globalen Umfang auszusetzen.
Wenn Sie Variablen wirklich löschen müssen, wird empfohlen, eine Existenzprüfung vor dem Löschen durchzuführen, um den Fehler "undefined Variable" zu vermeiden:
if (isset($GLOBALS['tempData'])) {
unset($GLOBALS['tempData']);
}
In größeren Projekten kann ein einheitlicher Reinigungsmechanismus ausgelegt werden. Beispielsweise können Sie eine Liste von Variablen registrieren, die zu einem bestimmten Zeitpunkt einheitlich uneingeschränkte Vorgänge ausführen müssen:
function clearGlobals(array $keys) {
foreach ($keys as $key) {
if (isset($GLOBALS[$key])) {
unset($GLOBALS[$key]);
}
}
}
clearGlobals(['tempCache', 'sessionBackup']);