Start · Sprachen · PHP · Referenz · ReflectionZendExtension

ReflectionZendExtension

Klasse

Ermöglicht die Reflexion von Zend-Erweiterungen (Engine-Extensions) und gibt Zugriff auf deren Namen und Metadaten.

seit PHP 5.4.0 Kategorie: oop

Signatur

class ReflectionZendExtension implements Reflector

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

Typ

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();
}
Name: Zend OPcache Version: 8.x.x Autor: Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Dmitry Stogov, Xinchen Hui URL: http://www.php.net Copyright: Copyright (c) 1999-2023 The PHP Group

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;
}
Zend OPcache: geladen Xdebug: nicht geladen ionCube Loader: nicht geladen

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();
}
Fehler: Cannot set read-only property ReflectionZendExtension::$name

// 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.