define()
Erfahren Sie, wie PHP define() Konstanten erstellt, wie es sich von const unterscheidet und welche Werte es akzeptiert.
Was die define()-Funktion tut
Die Funktion define() erstellt eine Konstante — einen benannten Wert, der nach der Zuweisung nicht mehr geändert werden kann. Im Gegensatz zu einer Variablen hat eine Konstante kein $-Präfix, ist im gesamten Skript global (auch innerhalb von Funktionen) und jeder Versuch, sie neu zu definieren, löst eine Warnung aus, anstatt den Wert stillschweigend zu überschreiben.
Verwenden Sie define(), wenn Sie eine einzige Quelle der Wahrheit für einen Wert benötigen, der sich zur Laufzeit niemals ändern soll: ein Konfigurations-Flag, eine Versionsnummer, ein Dateipfad oder ein API-Endpunkt.
Syntax
define(string $name, mixed $value, bool $case_insensitive = false): bool$name— der Name der Konstante. Per Konvention wird Großschreibung mit Unterstrichen verwendet (MAX_USERS), aber jeder gültige Bezeichner ist möglich.$value— der zu speichernde Wert. Skalare (int,float,string,bool) undnullwaren immer erlaubt; arrays wurden in PHP 7.0 als gültige Werte eingeführt.$case_insensitive(optional) — früher konnte man durch Übergabe vontruedie Konstante unter beliebiger Schreibweise lesen. Dieses Flag ist seit PHP 7.3 veraltet und wurde in PHP 8.0 entfernt, daher sollte es weggelassen werden und Konstantennamen als Groß-/Kleinschreibung-sensitiv behandelt werden.
define() gibt bei Erfolg true und bei Misserfolg false zurück.
Ein einfaches Beispiel
Hier erstellt define() eine Konstante namens GREETING mit dem Wert Hello, world!, dann gibt echo sie namentlich aus — ohne $ und ohne Anführungszeichen.
Ein array in einer Konstante speichern
Seit PHP 7.0 kann eine Konstante ein array enthalten, was praktisch für feste Nachschlagetabellen oder Optionslisten ist:
<?php
define("ROLES", ["admin", "editor", "viewer"]);
echo ROLES[1]; // editor
?>Prüfen, bevor Sie eine Konstante verwenden
Das Lesen einer undefinierten Konstante ist in PHP 8.0+ ein Fehler. Schützen Sie sich mit defined(), damit Ihr Code sauber abbricht:
<?php
if (!defined("APP_ENV")) {
define("APP_ENV", "production");
}
echo APP_ENV; // production
?>define() vs. const
PHP bietet zwei Möglichkeiten, eine Konstante zu deklarieren, und sie sind nicht austauschbar:
| Merkmal | define() | const |
|---|---|---|
| Ausführungszeitpunkt | Zur Laufzeit | Zur Kompilierzeit |
| Bedingte / Schleifen-Verwendung | Ja — kann innerhalb von if/for stehen | Nein — muss auf oberster Ebene oder in einer Klasse stehen |
| Dynamischer Name | Ja — Name kann eine Variable sein | Nein — Name ist fest |
| Klassenkonstanten | Nein | Ja |
Greifen Sie auf define() zurück, wenn der Name oder der Wert berechnet wird oder wenn die Deklaration bedingt sein muss. Verwenden Sie const für einfache, immer deklarierte Konstanten und für Klassenkonstanten.
Häufige Stolperfallen
- Kein
$und keine Anführungszeichen beim Lesen. Schreiben Sieecho GREETING;, nichtecho $GREETING;oderecho "GREETING";. - Neudefinition warnt, überschreibt nicht. Ein zweites
define("GREETING", ...)erzeugt eine Warnung und der ursprüngliche Wert bleibt erhalten. - Namen sind Groß-/Kleinschreibung-sensitiv.
GREETINGundGreetingsind nun zwei verschiedene Konstanten, da das Flag für Groß-/Kleinschreibungsunempfindlichkeit entfernt wurde. - Einmal definieren, früh definieren. Da Konstanten global und dauerhaft sind, setzen Sie sie am Anfang Ihres Skripts oder in einer Konfigurationsdatei.
Fazit
define() ist der Laufzeitweg, um einen globalen, unveränderlichen Wert in PHP zu erstellen. Kombinieren Sie es mit defined(), um Neudefinitionswarnungen zu vermeiden, bevorzugen Sie const für feste Kompilierzeit- und Klassenkonstanten, und lesen Sie PHP Constants für das große Bild.