7. Konstanten und globale Variablen

Du weißt nun schon eine ganz Menge über PHP, nachdem Du die Teile 1-6 des PHP Tutorials gelesen hast. Im sechsten Teil etwa haben wir uns mit der Ausgabe beschäftigt.

Dieses Mal soll es um sogenannte Konstanten und globale Variablen gehen.

Namensbereiche

Die Variablen, die Du bereits kennengelernt hast, und setzen kannst, haben einen ganz speziellen Bereich, in dem sie verwendet werden können.

Nur weil Du eine Variable setzt, ist sie noch längst nicht im ganzen Skript verfügbar. Ein Beispiel sind hier Klassen und Funktionen, mit denen wir uns später noch beschäftigen werden.

$a = 'Test';

function test() {
echo $a;
}

test();

Wir setzen in diesem Fall die Variable $a und rufen die Funktion test() auf, die selbst eine Variable $a ausgibt. Du kannst dieses Skript ja einmal mit einer Online PHP Sandbox ausführen lassen.

Es wird Dir nichts ausgeben und zwar aus dem einfachen Grund, dass $a innerhalb der Funktion nicht gesetzt wurde. Das macht auch nichts, denn wir haben die Möglichkeit Variablen als Parameter an Funktionen zu übergeben.

$b = 'Test';

function test($a) {
echo $a;
}

test($b);

Aufgrund der unterschiedlichen Namensbereiche können die Variablen dabei sowohl den gleichen Namen als auch einen unterschiedlichen Namen tragen.

Die Übergabe als Parameter eignet sich für die meisten Variablen und kann auch immer genutzt werden (mehrere werden durch Kommata getrennt). Doch was ist, wenn du etwa innerhalb der Funktion eine Verbindung zur Datenbank herstellen willst?

Dafür benötigst Du eine Variable, den sogenannten DB-Identifier. Du könntest diese Variable nun jedes Mal übergeben, oder Du kannst sie in den Funktionsbereich/den Namensraum dieser Funktion übertragen.

Mit $GLOBALS globalen Zugriff sichern

Dafür gibt es zwei Möglichkeiten. Die erste nennt sich $GLOBALS. Dabei handelt es sich selbst um ein globales Array, auf welches von überall aus zugegriffen werden kann.

$GLOBALS enthält alle gesetzten Variablen als Index und gibt so den entsprechenden Wert zurück. Für unser obiges Beispiel hieße das:

$meine_variable = 'Test';

function test() {
echo $GLOBALS['meine_variable'];
}

test();

oder:

$meine_variable = 'Test';

function test() {
$a =
$GLOBALS['meine_variable'];
echo $a;
}

test();

Das ist die erste Möglichkeit.

Das global-Schlüsselwort

Kommen wir nun zur zweiten. Die hört auf einen ähnlich klingenden Namen, global, funktioniert aber etwas anders.

$meine_variable1 = 'Hallo';
$meine_variable2 = 'Welt!';


function test() {
global $meine_variable1, $meine_variable2;
echo $meine_variable1." ".$meine_variable2;
}

test();

Dieses Beispiel gibt „Hallo Welt!“ aus. Du siehst also, dass Du mit Hilfe von dem Schlüsselwort global eine Variable (z.B. global $meine_variable1;) oder mehrere in einem neuen Funktionsbereich erreichbar machen kannst.

Dennoch zeugt es von einem schlechten Stil, dies grundsätzlich zu tun. Wann immer es möglich und sinnvoll ist, solltest Du die jeweiligen Möglichkeiten des Namensbereichs nutzen, also zum Beispiel bei einer Funktion Variablen als Parameter übergeben.

Konstanten in PHP

Dann bleibt noch ein Wort aus der Überschrift übrig, die „Konstante“. Schon der Name verrät, worum es sich handelt. Um etwas konstantes, feststehendes und unveränderliches.

Konstanten sind in allen Namensbereichen verfügbar. Du kannst also auch in einer Funktion auf eine Konstante zugreifen, die außerhalb der Funktion gesetzt wurde.

Eine Konstante kann anders als eine Variable nur einmal gesetzt werden – Überschreiben ist nicht möglich -, kann nur einen String oder eine Zahl beinhalten und benötigt kein $ vor dem Namen. Es gibt auch sogenannte Klassenkonstanten, wir wollen uns nun aber mit den „normalen“ auseinandersetzen.

Eine Konstante setzen

Um eine Konstante zu setzen, ist define zu verwenden:

define('name_der_1_konstante', 'Hallo Welt!');
define('name_der_2_konstante', 10);

Für den Namen gelten die selben Regeln wie bei einer Variable, abgesehen von dem Dollar-Zeichen: Buchstaben, Zahlen und Unterstriche sind erlaubt, aber keine PHP-Namen und Schlüsselwörter (wie zum Beispiel global).

Sobald sie einmal gesetzt wurde, kann sie nun von überall aus abgefragt werden, aber nicht mehr verändert werden. Dementsprechend sollten hier auch nur Werte oder Einstellungen gespeichert werden, die für den Seitenaufruf festgelegt sind.

Ein Beispiel: Mehrere Projekte basieren auf einem ähnlichen Skript. Dieses muss häufig den Namen des Projekts ausgeben. Dann könntest Du je nach Projekt eine Konstante mit dem Namen projektName setzen, die zum Beispiel den Wert „Meine Website“ beinhaltet.

Mit Konstanten arbeiten

Eine andere sinnvolle Einsatzmöglichkeit ist folgende: Du setzt einmalig eine Konstante, etwa includeCheck, auf den Wert 1. Wenn Du verhindern möchtest, dass einige deiner PHP Dokumente direkt aufgerufen werden können, so überprüfst du jedes Mal ob diese Variable gesetzt wurde. Ist dies der Fall, wird die Seite angezeigt.

So können Seiten nur per include & Co., nicht aber über den Browser aufgerufen werden.

Um keine Fehlermeldung zu erzeugen, wenn die Konstante nicht gesetzt ist, solltest Du mit defined() überprüfen, ob sie existiert:

if (defined('includeCheck')) {
echo 'Konstante includeCheck ist gesetzt.';
}

Natürlich kannst Du den Wert einer Konstanten auch ausgeben, zum Beispiel so:

echo meine_konstante;

oder so:

echo "Der Wert der Konstanten lautet:".konstante1." und ".konstante2;

Konstante mit variablem Namen ausgeben

Es gibt da aber noch einen Sonderfall. Möglicherweise hast Du, aus welchem Grund auch immer, den Namen einer Konstante in einer Variablen gespeichert. Die Überprüfung mit defined() funktioniert auch damit problemlos.

Um allerdings den Wert der Konstanten zu erhalten, muss dann constant() verwendet werden. Hier ein Beispiel:

define('projektName', 'Meine Seite');

$abc = 'projektName';

if (defined($abc)) {
echo "Wert der Konstanten: ".constant($abc).".";
}

Fazit & Ausblick

Damit weißt Du nun auch schon das Wichtigste über Konstanten und globale Variablen in PHP.

Für den kommenden Teil des Tutorials habe ich mir die Schleifen (foreach, while, for, switch) und deren Verwendung in PHP vorgenommen.

Ein Gedanke zu „7. Konstanten und globale Variablen“