Signatur
Beschreibung
get_defined_functions() liefert ein zweidimensionales assoziatives Array mit zwei Schlüsseln: internal enthält alle eingebauten PHP-Funktionen (also Funktionen aus dem PHP-Kern und geladenen Extensions), während user alle im aktuellen Skript oder eingebundenen Dateien selbst definierten Funktionen enthält.
Die Funktion ist besonders nützlich bei der Entwicklung von Debugging-Werkzeugen, Dependency-Analysetools oder beim Introspektieren einer Laufzeitumgebung. Sie erlaubt es, zur Laufzeit zu prüfen, welche Funktionen verfügbar sind – etwa um zu erkennen, ob eine bestimmte Extension geladen wurde oder ob ein Autoloader bereits bestimmte Funktionen registriert hat.
Alle Funktionsnamen werden in Kleinschreibung zurückgegeben, unabhängig davon, wie sie deklariert wurden. Dies entspricht dem PHP-Verhalten, dass Funktionsaufrufe case-insensitiv sind (ab PHP 8 ist dies allerdings offiziell deprecated für benutzerdefinierte Funktionen).
Mit dem Parameter $exclude_disabled (seit PHP 7.0.15 / 7.1.1) lässt sich steuern, ob durch disable_functions in der php.ini deaktivierte Funktionen aus der Liste ausgeschlossen werden sollen. Standardmäßig werden deaktivierte Funktionen ausgeschlossen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $exclude_disabled | bool | true | Wenn true (Standard), werden Funktionen, die per disable_functions-Direktive in der php.ini deaktiviert wurden, nicht in der Ergebnisliste aufgeführt. Bei false werden auch deaktivierte Funktionen im Array internal mitgeliefert. |
Rückgabewert
internal (Array der eingebauten PHP-Funktionen) und user (Array der benutzerdefinierten Funktionen). Alle Funktionsnamen sind Strings in Kleinschreibung.Beispiele
Übersicht aller definierten Funktionen ausgeben
<?php
function meineFunktion(): void {}
function nochEineFunktion(int $x): int { return $x * 2; }
$funktionen = get_defined_functions();
echo 'Anzahl interner Funktionen: ' . count($funktionen['internal']) . PHP_EOL;
echo 'Anzahl benutzerdefinierter Funktionen: ' . count($funktionen['user']) . PHP_EOL;
// Benutzerdefinierte Funktionen ausgeben
echo 'Benutzerdefinierte Funktionen:' . PHP_EOL;
foreach ($funktionen['user'] as $name) {
echo ' - ' . $name . PHP_EOL;
}
Prüfen, ob eine bestimmte Extension-Funktion verfügbar ist
<?php
$funktionen = get_defined_functions();
// Prüfen, ob curl_init verfügbar ist
$gesuchte = 'curl_init';
if (in_array($gesuchte, $funktionen['internal'], true)) {
echo "Die Funktion '{$gesuchte}' ist verfügbar." . PHP_EOL;
} else {
echo "Die Funktion '{$gesuchte}' ist NICHT verfügbar. Bitte die cURL-Extension aktivieren." . PHP_EOL;
}
// Alternativ: Alle verfügbaren Funktionen nach einem Muster filtern
$curlFunktionen = array_filter(
$funktionen['internal'],
fn(string $name): bool => str_starts_with($name, 'curl_')
);
echo 'Verfügbare cURL-Funktionen: ' . implode(', ', $curlFunktionen) . PHP_EOL;
Deaktivierte Funktionen sichtbar machen
<?php
// Alle internen Funktionen, inkl. deaktivierter (exclude_disabled = false)
$alleFunktionen = get_defined_functions(false);
// Nur die aktiven (exclude_disabled = true, Standard)
$aktiveFunktionen = get_defined_functions(true);
$deaktiviert = array_diff(
$alleFunktionen['internal'],
$aktiveFunktionen['internal']
);
if (empty($deaktiviert)) {
echo 'Keine Funktionen sind deaktiviert.' . PHP_EOL;
} else {
echo 'Deaktivierte Funktionen: ' . implode(', ', $deaktiviert) . PHP_EOL;
}
// Wichtig · Fallstricke
Achtung bei Performance: Da get_defined_functions() tausende interne Funktionen liefern kann, sollte die Funktion nicht in performance-kritischen Schleifen aufgerufen werden. Für einfache Prüfungen, ob eine einzelne Funktion existiert, ist function_exists() deutlich effizienter.
Namensraum-Einschränkung: Funktionen, die in einem PHP-Namensraum (namespace) definiert sind, erscheinen in der user-Liste mit ihrem vollqualifizierten Namen (z. B. mein\namensraum\meinefunktion). Anonyme Funktionen (Closures) und Arrow Functions werden nicht in der Liste aufgeführt.
Methoden ausgeschlossen: Die Funktion gibt keine Klassenmethoden zurück – nur frei definierte (globale oder namespaced) Funktionen. Für Methoden sind get_class_methods() oder die Reflection-API (ReflectionClass) zu verwenden.