Wat is de PHP Reflection API?
De PHP Reflection API is een ingebouwde PHP-functionaliteit waarmee je tijdens runtime meta-informatie over klassen, methodes, properties, functies en parameters kunt ophalen en inspecteren. Je kunt bijvoorbeeld nagaan welke argumenten de constructor van een klasse verwacht of welke attributes op een methode staan, zonder de broncode zelf aan te passen. Laravel gebruikt de Reflection API intensief binnenIlluminate/Container/Container.php en realiseert daarmee automatische resolutie in de DI-container, het uitlezen van PHP-attributes en method injection.
De belangrijkste klassen
ReflectionClass — klasse-informatie ophalen
ReflectionParameter — constructorargumenten inspecteren
De Laravel-container en de Reflection API
De IoC-container van Laravel realiseert constructorinjectie (automatische resolutie van dependencies) met behulp van de Reflection API. Laten we begrijpen hoeapp()->make(SomeClass::class) en dependency injection werken.
De build()-methode van de container (vereenvoudigd)
De echte build()-methode in Container.php ziet er ongeveer zo uit.
Util::getParameterClassName() is een utility die de typenaam als string haalt uit het resultaat van $parameter->getType(). Het wrapt de ReflectionNamedType die ReflectionParameter::getType() teruggeeft in een handzamere vorm.PHP-attributes uitlezen
Sinds PHP 8.0 kun je met de Reflection API de attributes ophalen die op klassen, methodes en properties staan. Laravel gebruikt dit mechanisme om queue-attributes en Eloquent-attributes te verwerken.Het basispatroon voor het uitlezen van attributes
Hoe Laravel het Queue-attribute uitleest (vereenvoudigd)
Attributes van methodes uitlezen
Toepassingsvoorbeelden in packageontwikkeling
Controleren welke interfaces een klasse implementeert
In een package kun je dynamisch controleren of een klasse een bepaalde interface implementeert.Metadata ophalen — routes automatisch registreren met attributes
Een patroon waarbij je attributes en Reflection combineert om routes automatisch te verzamelen.Dynamische methodeaanroepen — method injection
Decall()-methode van Laravel lost argumenten automatisch op via Reflection. Een voorbeeld waarin je hetzelfde mechanisme in een package implementeert.
Standaardwaarden van properties verzamelen
Een patroon waarmee je de standaardwaarden van een configuratieklasse via Reflection ophaalt.Aandacht voor performance
De Reflection API parset klasse-informatie elke keer opnieuw en heeft dus kosten. In productiecode is het cachen van de resultaten een best practice.Volgende stappen
PHP-attributes
Leer de details van PHP-attributes, die je uitleest met ReflectionClass::getAttributes().
Packageontwikkeling
Leer hoe je Laravel-packages ontwikkelt met behulp van de Reflection API.