猿问

关于 PHP 的 __callStatic 方法的一个大坑

直接上代码:

class A{
    public static function __callStatic($name, $arguments)
    {
        echo $name.'静态方法不存在!';
    }

    public function test()
    {
        echo 'test 方法';
    }
}

A::test();

上面代码输出:test 方法

结果调用了 test()方法,并没有执行__callStatic()方法,我的本意是想用__callStatic()处理A::test()这种错误的调用情况,这种情况该怎么处理呢?

智慧大石
浏览 592回答 4
4回答

手掌心

修改 public 修饰符的权限

白猪掌柜的

A::test()是静态调用,但你的test()不是static,语法上就出错了。另外,__callStatic()是说,当你调用一个不可访问的static方法时,自动触发。何为不可访问?你类外调用没有权限或者不存在。类似的,__call()是说,当你调用一个不可访问的普通方法时,自动触发。因此,你要实现_callStatic()的触发,得确保类外是静态调用一个不可访问的静态方法。
随时随地看视频慕课网APP
我要回答