PHP 魔术方法 __call() 和 __callStatic()

在 PHP 的面向对象中,当对象访问一个不存在的方法或者一个类访问一个不存在的静态方法时,都会报错。

__call() 和 __callStatic()

  • __call() 对象访问一个不存在的方法时执行
  • __callStatic() 类访问一个不存在的静态方法时执行
public function __call($name, $arguments)

public function __callStatic($name, $arguments)

案例:

class Person
{
    /**
     * 对象在调用一个不存在的方法时默认执行 __call() 方法
     *
     * @param $name 方法名
     * @param $arguments 参数,可以有多个参数,在 __call 中为数组
     */
    public function __call($name, $arguments)
    {
        // 注意: $name 的值区分大小写
        echo "Calling object method '$name' " . implode(', ', $arguments). "\n";
    }

    /**
     * 类在调用一个不存在的静态方法时默认执行 __callStatic() 方法
     *
     * @param $name 方法名
     * @param $arguments 参数,可以有多个参数,在 __call 中为数组
     */
    public static function __callStatic($name, $arguments)
    {
        // 注意: $name 的值区分大小写
        echo "Calling static method '$name' " . implode(', ', $arguments). "\n";
    }
}
$person = new Person();
$person->runTest(1, 2, 3); // 执行 __call(),返回 Calling object method 1, 2, 3
Person::runTest(9, 8, 7); // 执行 __callStatic() 返回 Calling static method 9, 8, 7
echo "\r\n";
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容