Sie sind insofern verwandt, als sie einen globalen Gültigkeitsbereich haben, aber Konstanten sollen nicht geändert werden, wenn sie einmal definiert sind, im Gegensatz zu globalen Variablen, die die Seite im Verlauf ändern kann. Es reicht also nicht aus, einfach zu define () anstatt global zu wechseln.
Es ist besser, wenn Sie Ihre Methoden so umgestalten, dass sie die Variablen als Parameter verwenden und darauf angewiesen sind, Variablen umzuleiten.
Ein paar Dinge hier.
Zunächst beziehen sich die register_globals, die Sie in Ihrer php.ini deaktivieren, auf eine alte PHP-Funktion, bei der jede Variable, die über eine Abfragezeichenfolge (GET) oder form (GET / POST) gesendet wird, in eine globale PHP-Variable umgewandelt wird. Dies ist die Funktionalität, die beim Ausschalten von register_globals deaktiviert ist (und sollte). Auch wenn diese Option deaktiviert ist, können Sie in Ihrer Anwendung weiterhin globale Variablen definieren.
In allgemeinen Programmierbegriffen werden globale Variablen (nicht die register_globals von PHP) als "schlecht" betrachtet, da Sie, wenn Sie als Programmierer auftauchen, keine Ahnung haben, welche anderen Teile der Anwendung sie verwenden oder ändern oder welche Auswirkungen sie haben Änderungen an diesem globalen könnten haben. Wenn Sie eine neue globale Variable definieren, besteht die Möglichkeit, dass Sie eine vorhandene Variable überschreiben, auf die sich jemand anders verlässt. Wenn Variablen lokal definiert sind (in einer einzelnen Funktion oder in anderen Sprachen ein einzelner Block), können Sie den lokalen Bereich untersuchen und normalerweise bestimmen, was eine Änderung an dieser Variablen bewirken soll.
Konstanten dagegen ändern sich nie. Sie definieren sie einmal, und sie bleiben definiert und niemand kann sie ändern. Das ist der Grund, warum globale Konstanten als "weniger schlecht" angesehen werden als globale Variablen.
Globale Variablen sind nicht konstant (Sie können den Wert einer globalen Variablen ändern, aber Sie können nur einmal eine Konstante definieren).
Konstanten sind nicht immer global (Sie können eine Konstante in einer Klasse deklarieren).
Globale Variablen können auch einen beliebigen Typ haben: Skalar, Array oder Objekt. Konstanten können nur Skalare sein.
Ich werde nicht sagen, entweder Konstanten oder Globals sind gut oder schlecht. Bei sachgemäßer Anwendung haben beide Vorteile. Im Zusammenhang mit der Funktion register_globals
gibt es Sicherheitsprobleme, die von der allgemeinen Verwendung von Globals getrennt sind.
Einmal definierte Konstanten können nicht geändert werden.
Verwenden Sie keine Konstanten als Variablen. Wenn Sie Variablen innerhalb von Funktionen verwenden müssen, übergeben Sie sie an die Funktion selbst. Verwenden Sie alles so, wie es verwendet werden soll. Variablen sind Variable und Konstanten sind Konstante .
Noch etwas zu beachten - Konstanten können keine Dinge wie Arrays oder Objekte speichern, wohingegen etwas, das für $ GLOBALS definiert ist, ein beliebiger Variablentyp sein kann. Wenn Sie also in einigen Fällen global sein möchten, aber nicht mithilfe von define () in einer Konstanten gespeichert werden können, sollten Sie stattdessen $ GLOBALS verwenden.
Auch register_globals und $ GLOBALS sind NICHT das Gleiche!
Sie können die globale Variable innerhalb der Funktion ändern, wenn beide denselben Namen haben, da die lokale Variable die globale Variable überschreibt, aber nicht den Wert der globalen Variablen outside.in constant, wenn Sie die Variable gleichen Namens in einer anderen Funktion verwenden möchten das ist dir nicht erlaubt und gibt einen Fehler, weil es einmalig definiert und in allen Programmen verwendet wird und du den Wert dieser Variablen in keiner Funktion ändern kannst oder blockiere es als festen Wert.
Versuchen Sie diesen einfachen Test:
fileA.php:
%Vor%fileB.php:
%Vor%Führen Sie dann fileB.php aus, und Sie werden sehen, dass SOMEVAL nicht definiert ist, bevor Sie die DateiA.php einschließen. Was das bedeutet ist, dass, bevor Sie etwas definieren, es für das Skript nicht sichtbar ist.