在 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";