PHP Accessor函数和数组

时间:2010-06-20 02:01:38

标签: php

在PHP中使用__set访问器函数我可以设置标量的值,但不能设置数组的元素。即:

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

我的访问者如下:

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

谢谢!

1 个答案:

答案 0 :(得分:9)

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

这不会调用__set魔法;你没有完全设置属性,你正在改变它的一部分。在这种情况下,如果存在这种魔术方法,PHP将调用__get方法来检索存储在属性$p->myarray中的数组。请注意,要更改返回的值以对属性产生任何影响,您必须通过引用返回:

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