Poser une valeur par référence sur une propriété qui n'existe pas appelle la méthode magique __get()

Je viens de découvrir que poser une valeur par référence sur une propriété qui n'existe pas appelle la méthode magique __get(), ce qui est fort ennuyeux lorsque l'on souhaite lancer une exception quand l'utilisateur essaie d'obtenir la valeur d'une propriété qui n'existe pas. Une histoire de serpent qui se mord la queue.

Considérons le code suivant :

<?php

class A
{
    public function __get($property)
    {
        throw new Exception('Tried to get property "' . $property . '"');
    }
}

$a = new A;
$c = 13;
$a->b = &$c;

L'exécution de ce code déclenchera l'exception qui se trouve dans la méthode __get(). On dirait que PHP récupère la propriété afin d'en changer l'adresse et la faire pointer vers la référence. Pour éviter ce désagrément il suffira donc de créer la propriété avant de changer sa référence :

<?php

$a->b = null;
$a->b = &$c;

Laisser un commentaire

Pas de commentaire