W3docs

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) und null waren immer erlaubt; arrays wurden in PHP 7.0 als gültige Werte eingeführt.
  • $case_insensitive (optional) — früher konnte man durch Übergabe von true die 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

php— editable, runs on the server

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:

Merkmaldefine()const
AusführungszeitpunktZur LaufzeitZur Kompilierzeit
Bedingte / Schleifen-VerwendungJa — kann innerhalb von if/for stehenNein — muss auf oberster Ebene oder in einer Klasse stehen
Dynamischer NameJa — Name kann eine Variable seinNein — Name ist fest
KlassenkonstantenNeinJa

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 Sie echo GREETING;, nicht echo $GREETING; oder echo "GREETING";.
  • Neudefinition warnt, überschreibt nicht. Ein zweites define("GREETING", ...) erzeugt eine Warnung und der ursprüngliche Wert bleibt erhalten.
  • Namen sind Groß-/Kleinschreibung-sensitiv. GREETING und Greeting sind 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.

Übungen

Übung
Wie wird die Funktion 'define' in PHP verwendet?
Wie wird die Funktion 'define' in PHP verwendet?
Was this page helpful?