PHP使用数组作为名称设置魔术方法

我正在创建一个类,我将用它来存储和加载一些设置.在课堂内,所有设置都存储在一个数组中.设置可以嵌套,因此设置数组是一个多维数组.我想使用魔术方法__get和__set存储和加载设置,因此设置可以充当类成员.但是,由于我使用的是嵌套方法,因此在尝试访问嵌套设置时无法使__set方法起作用.

这个班是这样的:

class settings
{
    private $_settings = array();

    //some functions to fill the array

    public function __set($name, $value)
    {
        echo 'inside the __set method';
        //do some stuff
    }
}

以及使用此类的代码:

$foo = new settings();
//do some stuff with the class, so the internal settings array is as followed:
//array(
//    somename => somevalue
//    bar => array (
//               baz = someothervalue
//               qux = 42
//                 )
//     )
$foo->somename = something; //this works, __set method is called correctly
$foo->bar['baz'] = somethingelse; //Doesn't work, __set method isn't called at all

我怎样才能让最后一行工作?

解决方法:

使用此方法访问数组时,它实际上会通过__get.为了在返回的数组上设置参数,需要将其作为参考返回:& __ get($name)

除非,您的意思是您希望作为数组返回的每个项目的行为方式与父对象相同,在这种情况下,您应该查看Zend Framework的Zend_Config对象源,以获得这样做的好方法. (它以子数组作为参数返回自身的新实例).

上一篇:在setter php中输入Hinting vs Type Casting


下一篇:如何在我的类中使用PHP的__get()和__set()来定义字段?