Konstanten in PHP

Man kann in PHP eine spezielle Form von Variablen definieren, deren Inhalte nicht variabel sind, sondern fest. Diese werden Konstante genannt. Dabei werden bzw. müssen die Inhalte bereits bei der Deklaration der Konstante festgelegt werden. Aus dem Programm heraus können die zugewiesenen Werte nicht mehr geändert oder gelöscht werden. Die Möglichkeit, den Wert im Programmcode zu ändern, bleibt natürlich.

Variablen werden immer dann als Konstante definiert, wenn man sicherstellen möchte, dass der Wert sich nicht ändert. Ein typisches Beispiel hierfür ist der Mehrwertsteuersatz oder eine sonstige prozentuale Angabe, die nicht verändert werden soll. Ist eine Konstante einmal definiert, kann man überall im Programmcode darauf zugreifen, da Konstanten zu den globalen Variablen zählen. Bei der Verwendung von Funktionen muss man jedoch darauf achten, dass wenn man auf Konstante zugreifen möchte, die in Funktionen definiert wurden, zuerst die Funktion aufgerufen werden muss.

Konstanten haben zwar genauso wie Variablen einen Namen und einen Inhalt. Sie werden jedoch nicht wie Variablen mit einem Dollarzeichen ($) deklariert. Die Inhalte werden außerdem nicht über den Zuweisungsoperator (=) festgelegt.

Die Deklaration einer Konstante erfolgt über die PHP-Funktion define(). Innerhalb der runden Klammern wird der Name der Konstante und durch ein Komma getrennt der Wert angegeben. Der Name wird entweder in einfachen oder doppelten Hochkommas gesetzt. Der Wert muss in Hochkomma gesetzt werden, wenn es sich um eine Zeichenkette (String) handelt. Bei anderen Datentypen wie z.B. Zahlen oder booleschen Werten ist das jedoch nicht notwendig. Optional kann man als dritte Angabe festlegen, ob der Name der Konstante case-sensitive sein soll oder nicht. Nachfolgend sind einige Beispiele.

// Konstante MWST mit Zahlenwert
define('MWST', 0.19);

// Konstante MWST_TEXT mit Zeichenkette
define('MWST_TEXT', 'Mehrwertsteuer: ');

// Konstante MWST_RECHNUNG mit booleschem Wert
define('MWST_RECHNUNG', TRUE);

// Zwecks Test ausgeben lassen
echo MWST;
echo MWST_TEXT;
echo MWST_RECHNUNG;

Namen für Konstanten

Bei den Namen gelten dieselben Bedingungen wie für Variablen. Es können somit Zahlen, Buchstaben und der Unterstrich sowie die Zeichen aus dem erweiterten ASCII-Zeichensatz verwendet werden und der erste Buchstabe muss mit dem Unterstrich oder einem Buchstaben beginnen. Bei den Programmierern hat es sich eingebürgert, dass man die Namen der Konstanten in Großbuchstaben schreibt. So hat man eine bessere Unterscheidung zu den übrigen Variablen.

Ohne eine Voreinstellung sind die Namen case-sensitive und es wird somit zwischen Groß- und Kleinschreibung unterschieden. Würde man z.B. die Konstante MWST definieren und mit mwst ausgeben wollen, würde das nicht funktionieren.

define('MWST', 0.19);

// Funktioniert nicht
echo mwst;

Wenn man möchte, dass zwischen Groß- und Kleinschreibung nicht unterschieden wird, kann man als dritte Angabe den booleschen Wert auf TRUE setzen. In dem Fall würde der Inhalt von MWST ausgegeben werden, selbst wenn man den Namen in Kleinbuchstaben schreibt. Setzt man den 3. Wert auf FALSE, wäre der Name wiederum case-sensitive.

// Dritter Wert mit TRUE
define('MWST', 0.19, TRUE);

// Funktioniert
echo mwst;

Variablen als Werte

Bei der Definition einer Konstante kann man als Wert nicht nur Strings, Zahlen oder boolesche Werte angeben. Es ist auch möglich, der Konstante den Wert einer Variable zuzuweisen.

// Variable
$mwst = 0.19;

// Konstante mit Variable als Wert
define('MWST', $mwst);

// Ausgabe 0.19
echo MWST;

Hierbei ist wichtig, dass wenn sich die Variable im Laufe des Programms ändert, die Konstante davon unberührt bleibt. Für die Konstante gilt der Wert der Variable, der zum Zeitpunkt der Definition galt.

// Variable
$mwst = 0.19;

// Konstante mit Variable als Wert
define('MWST', $mwst);


// Neuer Wert für Variable
$mwst = 0.07;

// Ausgabe trotzdem 0.19
echo MWST;

Vordefinierte Konstanten

Es stehen in PHP zur Laufzeit viele Konstanten zur Verfügung, die man nicht vorher definieren muss und die sehr nützlich sein können. Beispielsweise gibt die Konstante M_PI die Kreiszahl 3.1415926535898 zurück, die in den Programmen verwendet werden kann. Zwar sind Konstante feste Werte. Es gibt jedoch auch Ausnahmen, die magische Konstanten genannt werden und unterschiedliche Werte zurückgeben können. Beispielsweise gibt die magische Konstante __LINE__ die aktuelle Zeilennummer zurück, die unterschiedlich sein kann, je nachdem, in welcher Zeile man die Konstante verwendet.

// Ausgabe der Kreiszahl Pi
echo M_PI;

// Ausgabe der Zeilennummer
echo __LINE__;

Nicht alle vordefinierten Konstanten stehen immer zur Verfügung. Manche gehören zum Core von PHP und stehen immer zur Verfügung. Manch andere wiederum hängen von der Installation bzw. von den Erweiterungen ab.