Signatur
Beschreibung
get_defined_constants() liefert sämtliche Konstanten zurück, die zum Zeitpunkt des Aufrufs in der PHP-Umgebung definiert sind – sowohl built-in-Konstanten der PHP-Kern-Engine und installierten Erweiterungen als auch Konstanten, die per define() oder const im Benutzercode definiert wurden.
Wird $categorize auf true gesetzt, ist das Rückgabe-Array nicht flach, sondern in Unter-Arrays unterteilt. Jeder Schlüssel entspricht dem Namen der PHP-Erweiterung (z. B. Core, pcre, json) bzw. user für selbst definierte Konstanten. Das erleichtert die Unterscheidung zwischen systemseitigen und eigenen Konstanten erheblich.
Typische Einsatzgebiete sind Debugging, Introspection, das Erstellen von Dokumentation oder das Überprüfen, ob eine bestimmte Konstante bereits definiert wurde. Für den letztgenannten Zweck ist defined() jedoch die deutlich performantere Wahl.
Hinweis: Der Aufruf gibt einen Schnappschuss des aktuellen Zustands zurück. Konstanten, die danach per define() hinzugefügt werden, sind nicht enthalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $categorize | bool | false | Wenn true, werden die Konstanten nach Erweiterungszugehörigkeit gruppiert. Vom Benutzer definierte Konstanten erscheinen dann unter dem Schlüssel user. |
Rückgabewert
['KONSTANTENNAME' => Wert, ...]. Mit Kategorisierung: ein mehrdimensionales Array ['Erweiterung' => ['KONSTANTENNAME' => Wert, ...], ...].Beispiele
Alle eigenen Konstanten auflisten
<?php
define('APP_VERSION', '2.5.0');
define('MAX_RETRIES', 3);
$constants = get_defined_constants(true);
// Nur benutzerdefinierte Konstanten ausgeben
if (isset($constants['user'])) {
foreach ($constants['user'] as $name => $value) {
echo $name . ' = ' . var_export($value, true) . PHP_EOL;
}
}
Alle Konstanten einer bestimmten Erweiterung anzeigen
<?php
$constants = get_defined_constants(true);
// JSON-Erweiterungskonstanten ausgeben
$extension = 'json';
if (isset($constants[$extension])) {
echo "Konstanten der Erweiterung '{$extension}':" . PHP_EOL;
foreach ($constants[$extension] as $name => $value) {
echo ' ' . $name . ' = ' . var_export($value, true) . PHP_EOL;
}
} else {
echo "Erweiterung '{$extension}' nicht gefunden oder hat keine Konstanten.";
}
Prüfen, ob eine Konstante bereits definiert ist (Vergleich mit defined())
<?php
define('DB_HOST', 'localhost');
// Umständlicher Weg über get_defined_constants
$all = get_defined_constants();
$exists = array_key_exists('DB_HOST', $all);
echo $exists ? 'Konstante vorhanden' : 'Nicht vorhanden';
echo PHP_EOL;
// Empfohlener, performanterer Weg
echo defined('DB_HOST') ? 'Konstante vorhanden' : 'Nicht vorhanden';
echo PHP_EOL;
// Wichtig · Fallstricke
Performance: get_defined_constants() liest alle definierten Konstanten aus und erzeugt dabei ein unter Umständen sehr großes Array. Für die einfache Prüfung, ob eine einzelne Konstante definiert ist, sollte stets defined() verwendet werden.
Kategorisierung: Die Kategorienamen entsprechen den intern registrierten Erweiterungsnamen. Diese können sich zwischen PHP-Versionen ändern. Der Schlüssel user für selbst definierte Konstanten ist stabil und verlässlich.
Werte: Die Werte der Konstanten können beliebige skalare Typen sein (int, float, string, bool, null). Arrays als Konstantenwerte (ab PHP 7.0 mit const möglich) werden ebenfalls korrekt zurückgegeben.