2010-06-20 5 views
4

En utilisant une fonction accesseur __set en PHP, je peux définir la valeur d'un scalaire, mais pas un élément d'un tableau. À savoir:Fonctions et tableaux de l'accesseur PHP

$p->scalavar = "Hello"; // This works fine 
$p->myarray['title'] = "Hello"; //This does not work 

Mon accesseur est la suivante:

function __set($mbr_name, $mbr_value) { 
    $this->$mbr_name = $mbr_value; 
} 

Merci!

Répondre

9
$p->myarray['title'] = "Hello"; 

Ceci n'appelle pas la méthode magique __set; vous ne définissez pas exactement la propriété, vous en changez une partie. Dans ce cas, PHP appellera la méthode __get pour récupérer le tableau stocké dans la propriété $p->myarray si une telle méthode magique existe. Notez que pour que la modification de la valeur retournée ait un effet sur la propriété, vous devez renvoyer par référence:

function &__get($mbr_name) { 
    return $this->$mbr_name; 
}