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