在父/基类中使用__call?

时间:2014-10-09 03:06:02

标签: php laravel laravel-4 call

我正在设置一些具有公共基类的类。在每个类中,我都有一堆函数可以通过__call方法访问。

class Test
{
    private function meth1()
    {

    }

    public function __call($name, $args)
    {
        call_user_func_array([$this, $name], $args);

        return $this;
    }
}

由于类中的每个函数大部分只返回$this进行方法链接,因此我将return $this放入__call方法以避免一些冗余。

由于我有一堆扩展TestClass的类,我决定将__call方法移动到该基类中。

class BaseTest
{
    public function __call($name, $args)
    {
        call_user_func_array([$this, $name], $args);

        return $this;
    }
}

class Test extends BaseTest
{
    private function meth1()
    {

    }
}

但是,当我将其移入基类时,我收到Maximum function nesting level of '100' reached, aborting!错误。

有没有办法在基类中执行此操作,或者每个类是否都有自己的__call方法?

为什么会出现嵌套错误?

1 个答案:

答案 0 :(得分:0)

您收到错误,因为父类中无法访问private方法。

为什么你想要私密呢?

因此,要使其工作,请将__call移至扩展类,或制作方法protected

顺便问一下,你真的想从$this返回__call吗?你确定吗?