W3docs

PHP-Konstanten: Ein ausführlicher Leitfaden

Eine Konstante in PHP ist ein Wert, der nach seiner Festlegung nicht mehr geändert werden kann. Konstanten spielen eine wichtige Rolle in der Programmierung.

Eine Konstante in PHP ist ein benannter Wert, der nach seiner Definition nicht mehr geändert werden kann. Im Gegensatz zu Variablen werden Konstanten nicht mit einem $ vorangestellt, sie sind automatisch überall im Skript verfügbar (ohne Bereichsregeln), und jeder Versuch einer Neuzuweisung wird entweder ignoriert oder löst einen Fehler aus. Sie eignen sich ideal für feste Werte wie Konfigurationseinstellungen, API-Schlüssel, Versionsnummern und mathematische Grenzwerte.

Dieses Kapitel behandelt, wie Konstanten auf zwei verschiedene Arten definiert werden, die praktischen Unterschiede zwischen ihnen, magische Konstanten, Klassenkonstanten und häufige Fallstricke.

Eine Konstante definieren

PHP bietet zwei Werkzeuge: die Funktion define() und das Schlüsselwort const. Beide akzeptieren einen Namen und einen Wert.

<?php
// Using define()
define("SITE_NAME", "W3docs");

// Using the const keyword
const VERSION = "8.4";

echo SITE_NAME; // W3docs
echo PHP_EOL;
echo VERSION;   // 8.4

Konventionell werden Konstantennamen in GROSSBUCHSTABEN geschrieben, PHP erzwingt dies jedoch nicht. Ein gültiger Name beginnt mit einem Buchstaben oder Unterstrich, gefolgt von Buchstaben, Zahlen oder Unterstrichen — genau wie ein Variablenname, nur ohne das $.

Beachten Sie, dass Sie auf eine Konstante über ihren bloßen Namen (SITE_NAME) verweisen, nicht mit einem $. Konstanten sind Groß-/Kleinschreibungs-sensitiv: SITE_NAME und site_name sind zwei verschiedene Konstanten.

const vs define()

Beide erzeugen die gleiche Art von Konstante, verhalten sich jedoch auf Sprachebene unterschiedlich. Zu wissen, welche man verwenden sollte, vermeidet subtile Fehler:

constdefine()
Wird ausgewertet beiKompilierzeitLaufzeit
Innerhalb von if/Schleifen/Funktionen verwendbarNein (nur auf oberster Ebene / Klassenrumpf)Ja
Name kann dynamisch aufgebaut werdenNeinJa (es ist nur ein String-Argument)
Funktioniert innerhalb von KlassenJa (definiert eine Klassenkonstante)Nein

Da define() zur Ausführungszeit läuft, ist es die richtige Wahl, wenn eine Konstante nur unter bestimmten Bedingungen existieren soll:

<?php
if (!defined("DEBUG")) {
    define("DEBUG", true);
}

// define() can build the name dynamically — const cannot:
$key = "MAX_USERS";
define($key, 100);
echo MAX_USERS; // 100

const, das zur Kompilierzeit ausgewertet wird, ist schneller und die übliche Wahl für Konstanten auf oberster Ebene in modernem Code.

Konstanten prüfen und lesen

Bevor Sie eine Konstante verwenden, deren Existenz unsicher ist, prüfen Sie sie mit defined(). Um den Wert einer Konstante abzurufen, wenn Sie ihren Namen nur als String kennen, verwenden Sie constant():

<?php
define("TIMEOUT", 30);

if (defined("TIMEOUT")) {
    echo constant("TIMEOUT"); // 30
}

Konstanten können Arrays enthalten

Seit PHP 7 sind Konstanten nicht auf Skalare (int, float, string, bool) beschränkt — sie können auch Arrays enthalten. Dies ist praktisch für feste Nachschlagetabellen:

<?php
const ALLOWED_ROLES = ["admin", "editor", "viewer"];

echo ALLOWED_ROLES[1]; // editor

Weitere Informationen zu den gespeicherten Werttypen finden Sie unter PHP-Datentypen.

Magische Konstanten

PHP verfügt über magische Konstanten — vordefinierte Namen, deren Wert sich je nach Verwendungsort ändert. Sie werden mit führenden und abschließenden doppelten Unterstrichen geschrieben:

KonstanteAuflösung
__LINE__Die aktuelle Zeilennummer
__FILE__Der vollständige Pfad der Datei
__DIR__Das Verzeichnis der Datei
__FUNCTION__Der Name der aktuellen Funktion
__CLASS__Der Name der aktuellen Klasse
__METHOD__Der Name der Klassenmethode
<?php
function greet() {
    echo "Called from: " . __FUNCTION__ . PHP_EOL;
    echo "On line: " . __LINE__ . PHP_EOL;
}
greet();

Klassenkonstanten

Konstanten, die innerhalb einer Klasse deklariert werden, gehören zur Klasse selbst, nicht zu einer Instanz. Deklarieren Sie sie mit const und greifen Sie mit dem Operator :: (Bereichsauflösung) darauf zu:

<?php
class Circle {
    const PI = 3.14159;

    public function area(float $r): float {
        return self::PI * $r * $r;
    }
}

echo Circle::PI;            // 3.14159
echo PHP_EOL;
echo (new Circle)->area(2); // 12.56636

Für eine tiefere Betrachtung lesen Sie PHP-Klassenkonstanten.

Konstanten vs. Variablen

Beide dienen unterschiedlichen Zwecken. Eine Variable enthält Daten, die sich voraussichtlich ändern; eine Konstante sperrt einen Wert fest. Die wichtigsten Unterschiede:

VariableKonstante
Präfix$nameNAME (kein Zeichen)
Neu zuweisbarJaNein
GeltungsbereichLokal, sofern nicht global gemachtAutomatisch global
Groß-/KleinschreibungJaJa

Verwenden Sie eine Konstante immer dann, wenn ein Wert für die gesamte Laufzeit festbleiben soll — Konfigurationsflags, Grenzwerte, feste Zeichenketten — damit er nicht versehentlich anderswo überschrieben werden kann.

Häufige Fallstricke

  • Eine Konstante neu definieren. define() zweimal auf denselben Namen anzuwenden, löst eine Warnung aus und behält den ersten Wert; eine erneute Deklaration mit const ist ein fataler Fehler. Konstanten sind einmalig schreibbar.
  • Das fehlende $ vergessen. echo $SITE_NAME zu schreiben sucht nach einer undefinierten Variable, nicht nach Ihrer Konstante.
  • Undefinierte Konstanten. In PHP 8+ wirft die Verwendung eines undefinierten bloßen Wort-Konstantennamens einen Error. Immer define() aufrufen, bevor Sie es verwenden, oder mit defined() absichern.

Fazit

PHP-Konstanten bieten eine sichere Möglichkeit, Werte zu speichern, die sich niemals ändern dürfen: Definieren Sie sie mit const für gewöhnliche Konstanten auf oberster Ebene oder mit define(), wenn Sie Laufzeitlogik oder einen dynamischen Namen benötigen, gruppieren Sie feste Daten in Array- oder Klassenkonstanten, und nutzen Sie die eingebauten magischen Konstanten zum Debuggen. Richtig eingesetzt halten sie die Konfiguration an einem Ort und verhindern unbeabsichtigte Neuzuweisungen.

Übungen

Übung
Was sind die Eigenschaften von PHP-Konstanten?
Was sind die Eigenschaften von PHP-Konstanten?
Was this page helpful?