可以对数组和非数组类成员变量使用神奇方法__get和__set



我目前在PHP类示例中有以下__get/__set方法:

class example{
    /*Member variables*/
    protected $a; 
    protected $b = array(); 
    public function __get($name){
        return $this->$name;
    }
    public function __set($name, $value){
        $this->$name = $value;
    }
}

然而,除了设置标准的受保护变量,我还希望能够在类中设置受保护的数组。我已经看了一些其他的问题,并找到了一般的建议,如何使用__get/__set方法来简单地设置变量,但没有什么可以允许一个人使用这些神奇的方法来设置数组和非数组,即以以下方式:

$fun = new $example(); 
$fun->a = 'yay'; 
$fun->b['coolio'] = 'yay2'; 

简单,定义__get():

public function &__get($name)
{
    return $this->$name;
}
// ...
$fun = new example();
$fun->a = 'yay';
$fun->b['coolio'] = 'yay2';
var_dump($fun);
输出:

object(example)#1 (2) {
  ["a":protected]=>
  string(3) "yay"
  ["b":protected]=>
  array(1) {
    ["coolio"]=>
    string(4) "yay2"
  }
}

在处理引用时一定要小心,这很容易搞砸并引入难以跟踪的bug。

最新更新