Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels "
Einführung in die PHP Reflection API " von
Mustafa Magdi .
So analysieren Sie die Datenstruktur in PHP

Eintrag
Als ich anfing, in PHP zu programmieren, wusste ich nichts über die Funktionen der
Reflection-API . Der Hauptgrund ist, dass ich meine einfachen Klassen, Module oder sogar Pakete nicht entwerfen musste. Dann entdeckte ich, dass dies in vielen Bereichen eine große Rolle spielt. In diesem Artikel werden wir die
Reflection-API in folgenden Punkten betrachten:
- Was ist die Reflection-API ?
- Installation und Konfiguration
- Verwenden Sie
- Fazit
- Empfehlungen
1. Was ist die Reflection-API?
In der Informatik bedeutet Reflexion oder Reflexion (das Holonym für Selbstbeobachtung, englische Reflexion) einen Prozess, bei dem ein Programm zur Laufzeit seine eigene Struktur und sein eigenes Verhalten verfolgen und ändern kann. - Wikipedia .
Was bedeutet die Möglichkeit, anzuhalten und in Ihren Code zu schauen (
Reverse Engineering )? Schauen wir uns das folgende Code-Snippet an:
class Profile { public function getUserName(): string { return 'Foo'; } }
Die
Profilklasse ist eine Blackbox. Mit der
Reflection-API können Sie lesen, was sich darin befindet:
Daher fungiert die
ReflectionClass als Analyst für unsere
Profilklasse , und dies ist die Hauptidee der
Reflection-API .
PHP gibt Ihnen den Schlüssel zu jeder verschlossenen Box, also haben wir die Schlüssel
für Folgendes:
ReflectionClass : Gibt Klasseninformationen aus.
ReflectionFunction : Meldet Funktionsinformationen.
ReflectionParameter : Ruft Informationen zu den Parametern einer Funktion oder Methode ab.
ReflectionClassConstant : Gibt Informationen zu Klassenkonstanten aus.
Sie können die vollständige Liste auf
php.net studieren2. Installation und Konfiguration
Um die
Reflection-API- Klassen zu verwenden, müssen Sie nichts installieren oder konfigurieren, da sie Teil des PHP-Kerns sind.
3. Anwendungsbeispiele
Im Folgenden finden Sie einige Beispiele für die Verwendung der
Reflection-API :
Beispiel 1:Holen Sie sich die übergeordnete Klasse für eine bestimmte Klasse:
Beispiel 2:getUserName()
Sie die Dokumentation für die Methode
getUserName()
:
$method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */"
Beispiel 3:Es kann als
instanceOf
und
is_a()
, um Objekte zu validieren:
$class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj));
Beispiel 4:In einigen Situationen kann es vorkommen, dass Sie beim Testen von Einheiten nicht weiterkommen und sich fragen: "Wie kann ich eine private Funktion testen ?!"
Keine Sorge, hier ist der Trick:
Die vorherigen Beispiele sind ziemlich einfach, aber es gibt andere Beispiele, in denen Sie sehen können, wie die
Reflection-API häufiger verwendet wird:
- API-Dokumentationsgenerator : Das Paket lavarel-apidoc-generator verwendet ReflectionClass und ReflrectionMethod in großem Umfang , um Informationen zu Dokumentationsblöcken für Klassen und Methoden abzurufen und anschließend zu verarbeiten und diese Codeblöcke zu formatieren .
- Abhängigkeitsinjektionscontainer : Hier können Sie das gesamte Thema überprüfen
4. Fazit
PHP bietet eine vollständige
Reflection-API , mit der Sie verschiedene Bereiche von OOP-Strukturen problemlos erreichen können.
5. Referenzen
Vom Übersetzer:Sie können auch ein Beispiel für die Verwendung der Reflection-API im Codeception-Paket in der Stub- Klasse sehen.
Diese Klasse hilft durch Reflexion, Methoden und Eigenschaften in Unit-Tests einzutauchen.
Es sollte hinzugefügt werden, dass die Reflection-API ziemlich langsam arbeitet, damit Sie sich nicht zu sehr einmischen. Es wird empfohlen, es in Tests oder während des Debuggens zu verwenden. Wenn Sie jedoch darauf verzichten können, ist es besser, dies zu tun. Und es wird kategorisch nicht für die Verwendung im Arbeitscode des Projekts empfohlen, da es ist auch nicht sicher.