以最小的努力创建任意对象层次结构?

时间:2012-01-08 10:58:53

标签: php object

我的Chart类实际上允许我创建简单属性(类型为stringboolean等)以及嵌套object属性调用魔法{{ 1}}方法这样:

__call

输出:

$chart = new Chart();
$chart->simple = 'Hello';
$chart->newComplex();

var_dump($chart);

我想以这样的方式添加创建嵌套object(Chart)[1] public 'simple' => string 'Hello' (length=5) public 'complex' => object(stdClass)[2] 属性作为其他属性的子项(不是图表本身的子项)的能力:

object

问题是:如何使用$chart->newComplex2($chart->newComplex1()); 参数并修改$args来完成此操作?

__call()

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。诀窍是将父属性传递给__call。这是代码:

public function __call($name, $args)
{

    $type  = substr($name, 0, 3);
    $field = lcfirst(substr($name, strlen($type)));

    switch($type)
    {
        case 'get':
            return isset($this->$field) ? $this->$field : null;
        case 'new':
            return (isset($args[0]) ? $args[0]->$field = new stdClass()
                : $this->$field = new stdClass());
        default: return $this->$name();
    }

}