Start · Sprachen · PHP · Referenz · Reflection

Reflection

Klasse

Basisklasse der Reflection-API, die Hilfsmethoden zum Exportieren und Auflisten von Modifikatoren von Klassen und Methoden bereitstellt.

seit PHP 5.0.0 Kategorie: oop

Signatur

class Reflection

Beschreibung

Die Klasse Reflection ist die Wurzelklasse der PHP-Reflection-API und stellt statische Hilfsfunktionen bereit. Sie erlaubt es, die Modifikatoren von Klassen, Methoden, Eigenschaften und anderen Elementen als lesbare Strings darzustellen sowie Reflection-Objekte zu exportieren.

Im praktischen Einsatz wird Reflection selten direkt instanziiert – stattdessen arbeitet man in der Regel mit spezialisierten Unterklassen wie ReflectionClass, ReflectionMethod oder ReflectionProperty. Die Klasse stellt jedoch nützliche statische Methoden bereit, etwa Reflection::getModifierNames(), um den Modifikator-Bitmasken-Wert eines Klassenelements als lesbaren Array von Strings auszugeben.

Die Reflection-API eignet sich hervorragend für Frameworks, Dependency-Injection-Container, ORM-Bibliotheken und automatisierte Dokumentations-Werkzeuge, die zur Laufzeit Informationen über den Code selbst benötigen.

Hinweis: Seit PHP 8.0 ist die statische Methode Reflection::export() entfernt worden. Für Exporte der Reflection-Objekte sollte stattdessen deren jeweilige __toString()-Methode oder direkte Ausgabe genutzt werden.

Beispiele

Modifikatoren einer Methode als lesbare Namen ausgeben

<?php
class MeineKlasse {
    public static function meineMethode(): void {}
    protected abstract function abstrakt(): void {}
}

$reflMethod = new ReflectionMethod('MeineKlasse', 'meineMethode');
$modifiers = $reflMethod->getModifiers();

$names = Reflection::getModifierNames($modifiers);
echo implode(', ', $names) . PHP_EOL;
// Ausgabe: public, static
public, static

Modifikatoren einer Klassen-Eigenschaft analysieren

<?php
class Beispiel {
    private readonly string $wert;

    public function __construct(string $wert) {
        $this->wert = $wert;
    }
}

$reflProp = new ReflectionProperty('Beispiel', 'wert');
$modifierBitmask = $reflProp->getModifiers();

$names = Reflection::getModifierNames($modifierBitmask);
echo implode(', ', $names) . PHP_EOL;
// Ausgabe (PHP 8.1+): private, readonly
private, readonly

// Wichtig · Fallstricke

Deprecation / Entfernung: Die Methode Reflection::export() existierte bis PHP 7.4 (als deprecated markiert) und wurde in PHP 8.0 vollständig entfernt. Code, der diese Methode verwendet, muss auf (string) $reflectionObject oder print_r()-Alternativen umgestellt werden.

Performance: Die Reflection-API hat einen gewissen Laufzeit-Overhead. In leistungskritischen Applikationen sollten Reflection-Ergebnisse gecacht werden (z. B. in einem Array oder via APCu), statt sie bei jedem Request neu aufzulösen.

Zugriffsschutz: Reflection kann auf private und protected Mitglieder zugreifen (z. B. via ReflectionProperty::setAccessible()). Dies kann sicherheitsrelevant sein und sollte nur gezielt und kontrolliert eingesetzt werden.