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