Selbst wenn Sie ein neues umfangreiches PHP-Programm entwickeln, werden Sie zwangsläufig globale Daten verwenden, da einige Daten in verschiedenen Teilen Ihres Codes verwendet werden. Zu den allgemeinen globalen Daten gehören: Programmeinstellungsklassen, Datenbankverbindungsklassen, Benutzerinformationen usw. Es gibt viele Möglichkeiten, diese Daten zu globalen Daten zu machen. Die am häufigsten verwendete Methode ist die Verwendung der Schlüsselwortdeklaration „global“, die wir später in diesem Artikel ausführlich erläutern werden.
Der einzige Nachteil der Verwendung des Schlüsselworts „global“ zum Deklarieren globaler Daten besteht darin, dass es sich tatsächlich um eine sehr schlechte Programmiermethode handelt und später im Programm oft zu größeren Problemen führt, da globale Daten Ihren Code trennen. Die Codesegmente sind alle verknüpft Wenn Sie also einen Teil des Codes ändern, kann dies dazu führen, dass bei anderen Teilen Fehler auftreten. Wenn Ihr Code also viele globale Variablen enthält, ist die Wartung Ihres gesamten Programms schwierig.
In diesem Artikel wird gezeigt, wie Sie dieses Problem mit globalen Variablen durch verschiedene Techniken oder Entwurfsmuster verhindern können. Schauen wir uns natürlich zunächst an, wie das Schlüsselwort „global“ für globale Daten verwendet wird und wie es funktioniert. Durch die Verwendung globaler Variablen und des Schlüsselworts „global“
definiert PHP standardmäßig einige „Superglobals“-Variablen. Diese Variablen werden automatisch globalisiert und können an einer beliebigen Stelle im Programm aufgerufen werden, z. B. $_GET und $_REQUEST usw. Sie stammen in der Regel aus Daten oder anderen externen Daten und die Verwendung dieser Variablen bereitet in der Regel keine Probleme, da sie grundsätzlich nicht beschreibbar sind.
Sie können jedoch Ihre eigenen globalen Variablen verwenden. Mit dem Schlüsselwort „global“ können Sie globale Daten in den lokalen Gültigkeitsbereich einer Funktion importieren. Wenn Sie den „Variablennutzungsbereich“ nicht verstehen, lesen Sie bitte die entsprechenden Anweisungen im PHP-Handbuch.
Das Folgende ist ein Demonstrationsbeispiel für die Verwendung des Schlüsselworts „global“:
Das Folgende ist der zitierte Inhalt:
<?php
$my_var = 'Hallo Welt';
test_global();
Funktion test_global() {
// Jetzt im lokalen Bereich
// Die Variable $my_var existiert nicht
// Erzeugt den Fehler: „Undefinierte Variable: my_var“
echo $my_var;
// Nun lasst uns die Variable wichtig machen
global $my_var;
// Funktioniert:
echo $my_var;
}
?>
Wie Sie im obigen Beispiel sehen können, wird das Schlüsselwort „global“ zum Importieren globaler Variablen verwendet. Es sieht so aus, als ob es gut funktioniert und einfach ist. Warum machen wir uns also Gedanken darüber, das Schlüsselwort „global“ zum Definieren globaler Daten zu verwenden?
Hier sind drei gute Gründe:
1. Die Wiederverwendung von Code ist nahezu unmöglich.
Wenn eine Funktion von globalen Variablen abhängt, ist es nahezu unmöglich, diese Funktion in verschiedenen Umgebungen zu verwenden. Ein weiteres Problem besteht darin, dass Sie diese Funktion nicht extrahieren und in anderem Code verwenden können.
2. Das Debuggen und Lösen von Problemen ist sehr schwierig.
Das Verfolgen einer globalen Variablen ist viel schwieriger als das Verfolgen einer nicht-globalen Variablen. Eine globale Variable kann in einer unbekannten Include-Datei neu definiert werden, und selbst wenn Sie über einen sehr guten Programmeditor (oder eine IDE) verfügen, der Ihnen hilft, kann es mehrere Stunden dauern, bis Sie das Problem entdecken.
3. Es wird sehr schwierig sein, diese Codes zu verstehen.
Es ist für Sie schwierig herauszufinden, woher eine globale Variable kommt und wofür sie verwendet wird. Während des Entwicklungsprozesses kennen Sie möglicherweise alle globalen Variablen, aber nach etwa einem Jahr vergessen Sie möglicherweise zumindest einige davon. Zu diesem Zeitpunkt werden Sie es bereuen, so viele globale Variablen verwendet zu haben.
Wenn wir also keine globalen Variablen verwenden, was verwenden wir dann? Schauen wir uns unten einige Lösungen an.
Verwenden von Funktionsparametern
Eine Möglichkeit, die Verwendung globaler Variablen zu beenden, besteht darin, die Variable einfach als Parameter an die Funktion zu übergeben, wie unten gezeigt:
Das Folgende ist der Inhalt des Zitats:
<?php
$var = 'Hallo Welt';
test ($var);
Funktionstest($var) {
echo $var;
}
?>
Wenn Sie nur eine globale Variable übergeben müssen, dann ist dies eine sehr gute oder sogar herausragende Lösung, aber was ist, wenn Sie viele Werte übergeben möchten?
Angenommen, wir möchten eine Datenbankklasse, eine Programmeinstellungsklasse und eine Benutzerklasse verwenden. In unserem Code werden diese drei Klassen in allen Komponenten verwendet und müssen daher an jede Komponente übergeben werden. Wenn wir die Funktionsparametermethode verwenden, müssen wir Folgendes tun:
Das Folgende ist der zitierte Inhalt:
<?php
$db = neue DBConnection;
$settings = new Settings_XML;
$user = neuer Benutzer;
test($db, $settings, $user);
Funktionstest(&$db, &$settings, &$user) {
// Tu etwas
}
?>
Offensichtlich lohnt sich das nicht, und sobald wir neue Objekte hinzufügen müssen, müssen wir jeder Funktion einen weiteren Funktionsparameter hinzufügen. Wir müssen also einen anderen Weg finden, um es zu lösen.