__set
La méthode magique __set
est invoquée lorsqu'on tente d’écrire dans une propriété qui est soit inaccessible (c’est-à-dire protégée ou privée), soit inexistante.
Cette méthode peut être utile dans diverses situations spécifiques :
- Dynamisme : Si votre classe possède un grand nombre de propriétés et que vous ne souhaitez pas écrire un mutateur (setter) pour chacune d’entre elles, la méthode
__set
peut être une solution efficace. Elle peut également être utile si vous générez des propriétés dynamiquement. - Gestion des erreurs : La méthode
__set
vous permet de contrôler ce qui se passe lorsqu'un utilisateur tente d’écrire dans une propriété qui n’existe pas. Vous pouvez, par exemple, déclencher une erreur. - Validation des données : Vous pouvez utiliser
__set
pour valider ou filtrer les données avant qu’elles ne soient affectées à une propriété. Par exemple, vous pouvez vérifier que les données sont dans une plage de valeurs acceptable, etc…
L’utilisation de la méthode __set
doit être faite avec prudence, car elle peut rendre le code plus difficile à comprendre et à maintenir. Il est généralement préférable d’utiliser des mutateurs pour chaque propriété, sauf dans les cas où la flexibilité offerte par __set
est nécessaire.
class User {
private $username;
public function __set($property, $value) {
echo "Attempting to assign '$value' to '$property'";
$this->username = $value;
}
}
$user = new User;
$user->username = "John Doe"; // Outputs: Attempting to assign 'JohnDoe' to 'username'