Was ist die PHP Reflection API?
Die PHP Reflection API ist eine eingebaute PHP-Funktionalität, um Metainformationen zu Klassen, Methoden, Properties, Funktionen und Parametern zur Laufzeit auszulesen und zu untersuchen. Sie können etwa herausfinden, welche Argumente ein Konstruktor erwartet oder welche Attribute an einer Methode hängen — ohne den Quellcode zu ändern. Laravel nutzt die Reflection API intern inIlluminate/Container/Container.php intensiv, um automatische Auflösung im DI-Container, das Auslesen von PHP-Attributen und Method-Injection zu realisieren.
Wichtige Klassen
ReflectionClass — Klasseninformationen ermitteln
ReflectionParameter — Konstruktor-Argumente untersuchen
Der Laravel-Container und die Reflection API
Der IoC-Container von Laravel implementiert Konstruktor-Injection (automatische Auflösung von Abhängigkeiten) über die Reflection API. So funktioniertapp()->make(SomeClass::class) und die Dependency Injection.
Die build()-Methode des Containers (vereinfacht)
Die tatsächliche build()-Methode in Container.php sieht in etwa so aus:
Util::getParameterClassName() extrahiert den Typnamen aus dem Ergebnis von $parameter->getType(). Es umhüllt den von ReflectionParameter::getType() gelieferten ReflectionNamedType bequemer.PHP-Attribute auslesen
Ab PHP 8.0 lassen sich Attribute an Klassen, Methoden und Properties über die Reflection API auslesen. Laravel verarbeitet damit Queue- und Eloquent-Attribute.Grundmuster zum Auslesen von Attributen
Wie Laravel Queue-Attribute liest (vereinfacht)
Method-Attribute auslesen
Anwendungsbeispiele in der Paketentwicklung
Prüfen, welche Interfaces eine Klasse implementiert
In einem Paket können Sie dynamisch feststellen, ob eine Klasse ein bestimmtes Interface implementiert.Metadaten sammeln — Routen automatisch per Attribut registrieren
Ein Muster, in dem Attribute und Reflection kombiniert werden, um Routen automatisch einzusammeln.Dynamische Methodenaufrufe — Method-Injection
Laravelscall()-Methode löst Argumente per Reflection auf. So lässt sich derselbe Mechanismus in einem Paket bauen.
Standardwerte von Properties einsammeln
Muster, um Defaults aus einer Config-Klasse per Reflection zu extrahieren.Performance-Überlegungen
Die Reflection API parst Klasseninformationen jedes Mal neu, was Kosten verursacht. In Produktionscode empfiehlt es sich, Ergebnisse zu cachen.Nächste Schritte
PHP-Attribute
Details zum Auslesen von PHP-Attributen mit ReflectionClass::getAttributes().
Paketentwicklung
Wie Sie Laravel-Pakete mithilfe der Reflection API entwickeln.