Écriture de propriétés via la magie en POO en PHP
La méthode magique __set est appelée
lors d'une tentative de modification de la valeur d'une propriété
inexistante ou cachée. Elle accepte comme paramètres
le nom de la propriété et la valeur que
l'on tente de lui assigner.
Regardons un exemple pratique.
Supposons que nous ayons la classe Test suivante :
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Créons dans cette classe la méthode magique
__set qui, à l'aide de la fonction
var_dump, affichera le nom de la propriété
à laquelle on a tenté d'accéder, et la valeur
que l'on a tenté de définir pour cette propriété :
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Vérifions le fonctionnement de notre classe :
<?php
$test = new Test;
$test->prop = 'value'; // var_dump de la méthode __set affichera 'prop value'
?>
Maintenant, assignons la valeur
à la propriété dont le nom est stocké dans la variable
$property :
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // on assigne la valeur
}
}
?>
Maintenant, nous pourrons écrire dans les propriétés privées de l'extérieur de la classe :
<?php
$test = new Test;
$test->prop1 = 1; // on écrit 1
$test->prop2 = 2; // on écrit 2
?>
Nous pouvons écrire, cependant, vérifier si quelque chose y a été écrit - non, car les propriétés sont privées.
On peut créer un getter pour ces propriétés ou
simplement utiliser la méthode magique
__get. Utilisons la deuxième option :
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Getter magique des propriétés :
public function __get($property)
{
return $this->$property;
}
}
?>
Maintenant nous pouvons vérifier le fonctionnement de notre classe. Vérifions :
<?php
$test = new Test;
$test->prop1 = 1; // on écrit 1
$test->prop2 = 2; // on écrit 2
echo $test->prop1; // affichera 1
echo $test->prop2; // affichera 2
?>
En réalité, bien sûr, il ne faut pas autoriser n'importe qui à écrire dans les propriétés privées, sinon l'essence même de ces propriétés privées disparaît (il serait plus simple de les rendre publiques et c'est tout).
Par conséquent, cette méthode ne doit être utilisée que lorsqu'il y a une réelle nécessité. Dans les prochaines leçons, nous verrons d'autres exemples d'utilisation judicieuse.