__callStatic方法的神秘行为

时间:2013-01-22 21:01:38

标签: php

所以问题Weird behaviour with triggering __callStatic() from non-static method很好,因为它解释了在类本身内没有调用__callStatic的奇怪行为(请注意,我没有在5.3.3中看到这种行为,而是在5.3.8和5.3中看到这种行为0.12)。似乎只能从类外部调用__callStatic。这是一个事实。但是,如果我真的希望从我的班级中调用__callStatic,我该怎么办?我应该使用什么语法来解决这个问题?

2 个答案:

答案 0 :(得分:3)

它不必来自类外部,也不是来自对象上下文(即$this是类的实例)。因此,您可以使用静态方法包装此调用,例如:

class TestCallStatic
{
    public function __call($func, $args)
    {
        echo "__call($func)";
    }

    public static function __callStatic($func, $args)
    {
        echo "__callStatic($func)";
    }

    public function test()
    {
        self::_test();
    }
    protected static function _test()
    {
        self::i_am_static();
    }
}

$test = new TestCallStatic();
$test->test();

输出:

  

__ callStatic(i_am_static)

答案 1 :(得分:0)

您可以将该功能抽象为另一个方法,如Class :: magicCall($ method,$ args),并从__callStatic()中调用该函数。这样,您也可以直接调用Class :: magicCall()来访问该功能。