Signatur
Beschreibung
ReflectionZendExtension ist Teil der PHP Reflection API und ermöglicht es, Informationen über im PHP-Kern registrierte Zend-Erweiterungen (sogenannte Engine-Extensions) abzurufen. Im Gegensatz zu regulären PHP-Erweiterungen, die über ReflectionExtension abgebildet werden, bezieht sich diese Klasse auf Erweiterungen, die tief in die Zend Engine integriert sind, z. B. Opcache oder Xdebug (als Zend Extension registriert).
Der wichtigste Anwendungsfall ist das Prüfen, ob eine bestimmte Zend-Erweiterung geladen ist, sowie das Abrufen ihrer Metadaten wie Name, Version, Autor, URL und Copyright-Informationen. Diese Informationen sind nützlich für Diagnose-Tools, Debugging-Utilities oder Frameworks, die auf bestimmte Zend-Erweiterungen angewiesen sind.
Das name-Attribut ist nur lesbar — ein Schreibversuch löst eine ReflectionException aus. Das Objekt wird durch Übergabe des Erweiterungsnamens als String an den Konstruktor erzeugt. Ist die angegebene Erweiterung nicht geladen, wird ebenfalls eine ReflectionException geworfen.
Mit Methoden wie getName(), getVersion(), getAuthor(), getURL() und getCopyright() lassen sich alle verfügbaren Metadaten der Erweiterung abrufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Der Name der Zend-Erweiterung, z. B. 'Zend OPcache' oder 'Xdebug'. Bei einem unbekannten Namen wird eine ReflectionException ausgelöst. |
Rückgabewert
Beispiele
Grundlegende Verwendung: Informationen über Opcache abrufen
<?php
try {
$ext = new ReflectionZendExtension('Zend OPcache');
echo 'Name: ' . $ext->getName() . PHP_EOL;
echo 'Version: ' . $ext->getVersion() . PHP_EOL;
echo 'Autor: ' . $ext->getAuthor() . PHP_EOL;
echo 'URL: ' . $ext->getURL() . PHP_EOL;
echo 'Copyright: ' . $ext->getCopyright() . PHP_EOL;
} catch (ReflectionException $e) {
echo 'Erweiterung nicht gefunden: ' . $e->getMessage();
}
Prüfen ob eine Zend-Erweiterung geladen ist
<?php
function isZendExtensionLoaded(string $name): bool
{
try {
new ReflectionZendExtension($name);
return true;
} catch (ReflectionException) {
return false;
}
}
$extensions = ['Zend OPcache', 'Xdebug', 'ionCube Loader'];
foreach ($extensions as $ext) {
$status = isZendExtensionLoaded($ext) ? 'geladen' : 'nicht geladen';
echo $ext . ': ' . $status . PHP_EOL;
}
Versuch, das name-Attribut zu schreiben (löst Exception aus)
<?php
try {
$ext = new ReflectionZendExtension('Zend OPcache');
$ext->name = 'AndererName'; // Schreibversuch auf read-only Property
} catch (ReflectionException $e) {
echo 'Fehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Hinweis zur Namensgebung: Zend-Erweiterungen haben oft Namen mit Leerzeichen (z. B. 'Zend OPcache'). Der exakte Name muss verwendet werden — Groß-/Kleinschreibung und Leerzeichen müssen präzise übereinstimmen. Eine Liste der geladenen Zend-Erweiterungen liefert get_loaded_extensions(true) (Parameter true für Zend-Erweiterungen).
Unterschied zu ReflectionExtension: ReflectionExtension deckt reguläre PHP-Erweiterungen ab (z. B. pdo, json), während ReflectionZendExtension speziell für tief im Engine-Kern verankerte Zend-Extensions zuständig ist. Beide Typen sind nicht austauschbar.
Verfügbarkeit von Methoden: Nicht alle Metadaten-Felder (Version, Autor, URL, Copyright) müssen von jeder Erweiterung befüllt sein — leere Strings sind möglich.