Signatur
Beschreibung
ReflectionExtension ist Teil der PHP-Reflection-API und ermöglicht es, zur Laufzeit Metadaten über eine installierte und geladene PHP-Erweiterung abzufragen. Mit ihr lassen sich z. B. alle von einer Extension bereitgestellten Funktionen, Klassen, Konstanten und INI-Einträge introspektieren.
Typische Einsatzgebiete sind Debugging-Tools, Dokumentationsgeneratoren, Plugin-Systeme und Kompatibilitätsprüfungen, bei denen sichergestellt werden muss, dass bestimmte Erweiterungen mit den erwarteten Funktionen und Klassen verfügbar sind.
Ein ReflectionExtension-Objekt wird durch Übergabe des Erweiterungsnamens (z. B. 'json', 'mbstring') erzeugt. Ist die Erweiterung nicht geladen, wird eine ReflectionException geworfen.
Die Klasse ergänzt extension_loaded() und get_extension_funcs() mit einem objektorientierten Interface und bietet deutlich mehr Informationen als diese einfachen Funktionen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Der Name der zu untersuchenden PHP-Erweiterung, z. B. 'json' oder 'PDO'. Groß-/Kleinschreibung wird ignoriert. |
Rückgabewert
Beispiele
Grundlegende Informationen über die JSON-Erweiterung
<?php
$ext = new ReflectionExtension('json');
echo 'Name: ' . $ext->getName() . PHP_EOL;
echo 'Version: ' . $ext->getVersion() . PHP_EOL;
echo PHP_EOL . 'Funktionen:' . PHP_EOL;
foreach (array_keys($ext->getFunctions()) as $funcName) {
echo ' ' . $funcName . PHP_EOL;
}
echo PHP_EOL . 'Konstanten:' . PHP_EOL;
foreach (array_keys($ext->getConstants()) as $constName) {
echo ' ' . $constName . PHP_EOL;
}
Verfügbare Klassen und INI-Einstellungen einer Erweiterung prüfen
<?php
try {
$ext = new ReflectionExtension('pdo');
echo 'Klassen in PDO:' . PHP_EOL;
foreach ($ext->getClassNames() as $className) {
echo ' ' . $className . PHP_EOL;
}
echo PHP_EOL . 'INI-Einstellungen:' . PHP_EOL;
foreach ($ext->getINIEntries() as $key => $value) {
echo ' ' . $key . ' = ' . var_export($value, true) . PHP_EOL;
}
} catch (ReflectionException $e) {
echo 'Erweiterung nicht verfügbar: ' . $e->getMessage();
}
Alle geladenen Erweiterungen mit Versionen auflisten
<?php
foreach (get_loaded_extensions() as $extName) {
$ext = new ReflectionExtension($extName);
printf("%-25s %s\n", $ext->getName(), $ext->getVersion() ?? 'n/a');
}
// Wichtig · Fallstricke
ReflectionException bei nicht geladener Erweiterung: Wird der Konstruktor mit einem nicht geladenen Erweiterungsnamen aufgerufen, wirft PHP eine ReflectionException. Prüfe vorher mit extension_loaded('name'), ob die Erweiterung verfügbar ist.
Methoden im Überblick: Die wichtigsten Methoden der Klasse sind getName(), getVersion(), getFunctions(), getClasses(), getClassNames(), getConstants(), getINIEntries(), getDependencies() und info(). info() gibt dieselbe Ausgabe wie phpinfo() für diese Extension aus.
Performance: Die Reflection-API ist deutlich langsamer als einfache Funktionen wie extension_loaded(). Sie sollte nicht im Hot-Path einer Anwendung verwendet werden, sondern nur für Analyse- oder Bootstrap-Zwecke.