Réfléxivité
Dans le développement de logiciels, le terme "réflexion" signifie qu'un programme connaît sa propre structure au moment de l'exécution et qu'il peut également la modifier. Cette capacité est également appelée "introspection". Dans le domaine PHP, Reflection est utilisé pour garantir la sécurité des types dans le code de programme.
Exemple
Préparons une classe d'exemple simple :
class Example {
private $attribute1;
protected $attribute2;
public $attribute3;
const PI = 3.1415;
public function __construct() {
$this->attribute1 = "Lorem ipsum";
$this->attribute2 = 36;
$this->attribute3 = 2 * self::PI;
}
public function getAttribute1() {
return $this->attribute1;
}
public function setAttribute1($attribute1) {
$this->attribute1 = $attribute1;
}
private function getAttribute2() {
return $this->attribute2;
}
}
Comme on peut le voir, cette classe d'exemple fournit quelques méthodes et attributs simples. Elle nous servira de point de départ dans les prochains exemples.
Lister les méthodes d’un objet
Grâce à l'API Reflection, il est possible d'analyser les méthodes d’un objet depuis l'extérieur. Pour obtenir une liste complète des méthodes, Reflection()
met à disposition la méthode statique getMethods()
.
$reflection_class = new ReflectionClass("Example");
foreach ($reflection_class->getMethods() as $method) {
echo($method->getName() . "\n"));
}
Le résultat est le suivant :
__construct
getAttribute1
setAttribute1
getAttribute2
La fonction ReflectionClass()
n'attend comme paramètre que le nom complet de la classe à analyser (y compris le namespace, s'il existe). Pour rendre l'initialisation un peu plus agréable, on peut aussi utiliser directement la résolution du nom de classe de PHP :
$reflection_class = new ReflectionClass( Example::class );
Outre les noms des méthodes, d'autres informations peuvent être lues :
$reflection_class = new ReflectionClass( Example::class );
foreach ($reflection_class->getMethods() as $method) {
echo($method->getName() . "\n");
echo("Nombre de paramètres : " . $method->getNumberOfParameters() . "\n");
echo("Est privé : " . ($method->isPrivate() ? 'Oui' : 'Non') . "\n\n");
}
Le résultat est le suivant :
__construction
- Nombre de paramètres : 0
- Est privé : Non
getAttribute1
- Nombre de paramètres : 0
- Est privé : Non
setAttribute1
- Nombre de paramètres : 1
- Est privé : Non
getAttribute2
- Nombre de paramètres : 0
- Est privé : Oui
Lire les attributs
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !