PHP - Was ist der Unterschied zwischen globalen Variablen und Konstanten?

7

Nach vielen Quellen sollte register_globals (globale Variablen das ist) in Ihrer php.ini deaktiviert sein. Soll ich define () in meinen Code schreiben und Konstanten verwenden, wenn globale Variablen deaktiviert sind? Sind diese überhaupt verwandt?

    
Gal 13.01.2010, 20:04
quelle

8 Antworten

15

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.

    
Parrots 13.01.2010, 20:07
quelle
8

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.

    
Alan Storm 13.01.2010 20:11
quelle
6

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.

    
Bill Karwin 13.01.2010 20:23
quelle
2

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 .

    
Sampson 13.01.2010 20:07
quelle
1

Einige konstante Beispiele:

%Vor%     
Sjoerd 13.01.2010 20:33
quelle
0

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!

    
Travis 15.09.2010 20:24
quelle
0

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.

    
anjli rajput 22.02.2017 04:52
quelle
-1

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.

    
Daniel 13.01.2010 20:36
quelle

Tags und Links