Obtention de propriétés par magie en POO en PHP
La prochaine méthode magique que nous allons
analyser s'appelle __get. Cette
méthode se déclenche lors d'une tentative de lecture de la valeur
d'une propriété privée ou protégée.
Si la méthode __get est implémentée dans une
classe, alors tous les accès aux propriétés inexistantes
ou cachées seront traités par
cette méthode.
Dans ce cas, PHP transmettra automatiquement le nom de la propriété demandée dans le premier paramètre de cette méthode, et la valeur retournée par cette méthode sera considérée comme la valeur de la propriété à laquelle l'accès a été tenté.
Il est probable que ce ne soit pas encore très clair,
alors regardons un exemple pratique. Supposons que nous ayons une classe
Test avec une propriété privée et une propriété publique :
<?php
class Test
{
public $prop1 = 1; // propriété publique
private $prop2 = 2; // propriété privée
}
?>
Ajoutons à notre classe la méthode magique
__get, qui pour commencer va simplement
retourner le nom de la propriété à laquelle l'accès
a été tenté :
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // retournons simplement le nom de la propriété
}
}
?>
Vérifions le fonctionnement de la méthode magique créée. Accédons à trois types de propriétés : à une propriété publique, à une propriété privée et à une propriété inexistante :
<?php
$test = new Test;
// Accès à la propriété publique :
echo $test->prop1; // affichera 1 - c'est-à-dire la valeur de la propriété
// Accès à la propriété privée :
echo $test->prop2; // affichera 'prop2' - le nom de la propriété
// Accès à une propriété inexistante :
echo $test->prop3; // affichera 'prop3' - le nom de la propriété
?>
Comme vous pouvez le voir, notre méthode magique réagit à l'accès aux propriétés privées et inexistantes, mais ignore l'accès aux propriétés publiques - elles fonctionnent comme auparavant.