Signatur
Beschreibung
define() legt eine Konstante mit einem gegebenen Namen und Wert fest. Im Gegensatz zu Variablen können Konstanten nach ihrer Definition nicht mehr geändert oder gelöscht werden. Sie sind programmweit verfügbar – unabhängig von Gültigkeitsbereichen (Scopes) wie Funktionen oder Klassen – und benötigen kein $-Zeichen beim Aufruf.
Als Wert sind skalare Typen erlaubt: int, float, string, bool und null. Ab PHP 7.0 sind auch Arrays als Konstantenwert zulässig. Ressourcen können theoretisch als Konstante gespeichert werden, sollten aber aus Portabilitätsgründen vermieden werden.
define() ist besonders nützlich, wenn der Konstantenname erst zur Laufzeit bekannt ist (z. B. aus einer Konfigurationsdatei). Für Konstanten, deren Name bereits beim Schreiben des Codes feststeht, ist das Schlüsselwort const im Klassenkontext oder auf Dateiebene (ab PHP 5.3) die bevorzugte Alternative, da es früher (zur Compile-Zeit) ausgewertet wird.
Der Parameter $case_insensitive war seit PHP 7.3 als veraltet markiert und wurde in PHP 8.0 vollständig entfernt. Konstanten sollten stets als Groß-/Kleinschreibung-sensitiv behandelt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $constant_name Pflicht | string | Der Name der Konstante. Es gelten die üblichen PHP-Bezeichner-Regeln; für globale Konstanten sind Großbuchstaben per Konvention üblich, z. B. MAX_SIZE. |
|
| $value Pflicht | mixed | Der Wert der Konstante. Erlaubte Typen: int, float, string, bool, null und seit PHP 7.0 auch array. |
|
| $case_insensitive | bool | false | Veraltet seit PHP 7.3, entfernt in PHP 8.0. War true, konnte die Konstante unter jedem Groß-/Kleinschreibungs-Muster des Namens abgerufen werden. Nicht mehr verwenden. |
Rückgabewert
true zurück, wenn die Konstante erfolgreich definiert wurde, andernfalls false (z. B. wenn eine Konstante mit diesem Namen bereits existiert oder der Name ungültig ist).Beispiele
Einfache Konstante definieren und verwenden
<?php
define('MAX_LOGIN_ATTEMPTS', 5);
define('APP_NAME', 'MeinProjekt');
define('DEBUG_MODE', false);
echo APP_NAME . ' erlaubt maximal ' . MAX_LOGIN_ATTEMPTS . ' Anmeldeversuche.' . PHP_EOL;
if (!DEBUG_MODE) {
echo 'Debug-Modus ist deaktiviert.' . PHP_EOL;
}
Konstante aus Konfigurationsarray zur Laufzeit erzeugen
<?php
$config = [
'DB_HOST' => 'localhost',
'DB_PORT' => 3306,
'DB_NAME' => 'shop',
];
foreach ($config as $name => $value) {
define($name, $value);
}
echo 'Verbinde zu ' . DB_HOST . ':' . DB_PORT . '/' . DB_NAME . PHP_EOL;
Array-Konstante (ab PHP 7.0)
<?php
define('ALLOWED_ROLES', ['admin', 'editor', 'moderator']);
$userRole = 'editor';
if (in_array($userRole, ALLOWED_ROLES)) {
echo 'Zugriff gewährt.' . PHP_EOL;
} else {
echo 'Zugriff verweigert.' . PHP_EOL;
}
Rückgabewert prüfen – doppelte Definition abfangen
<?php
define('VERSION', '1.0.0');
$result = define('VERSION', '2.0.0'); // Konstante existiert bereits
if (!$result) {
echo 'Konstante konnte nicht neu definiert werden.' . PHP_EOL;
}
echo VERSION . PHP_EOL;
// Wichtig · Fallstricke
Groß-/Kleinschreibung: Konstantennamen sind standardmäßig case-sensitiv. MAX_SIZE und max_size wären zwei verschiedene Konstanten. Halte dich an die Konvention, Konstanten vollständig groß zu schreiben.
Namespace-Präfix: Wird define() innerhalb eines Namespaces aufgerufen, erzeugt es dennoch eine globale Konstante, sofern kein Namespace-Trennzeichen (\) im Namen verwendet wird. Für Namespace-gebundene Konstanten sollte stattdessen const genutzt werden.
Entfernte Option $case_insensitive: Der dritte Parameter wurde in PHP 8.0 vollständig entfernt. Code, der diesen Parameter noch nutzt, erzeugt in PHP 8.0+ einen Fehler.
Compile-Zeit vs. Laufzeit: Wenn der Konstantenname bereits zur Schreibzeit bekannt ist, bevorzuge const im globalen oder Klassen-Scope, da define() erst zur Laufzeit ausgewertet wird und daher z. B. nicht in switch-Case-Labels oder Default-Parameterwerten einsetzbar ist.