我的Chart
类实际上允许我创建简单属性(类型为string
,boolean
等)以及嵌套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()
答案 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();
}
}