1. 什么是PHP __call()方法?
在PHP面向对象编程中,__call()方法是一个魔术方法,用于动态调用那些不存在或不可见的方法。该方法是利用PHP5 Object-Oriented编程中的特性来扩展类功能。
当调用不存在或不可见的方法时,会自动调用__call()方法,将方法名和参数作为参数传递给该方法。然后在__call()方法中可以自定义处理该方法,比如委托给另一个对象处理。
2. PHP __call()方法委托示例
为了更好地理解__call()方法的使用,下面举一个委托示例。
2.1 示例说明
假设有一个类A和一个类B,类A需要调用类B中的某个方法。我们可以在类A中定义一个魔术方法__call(),在该方法中将调用转发给类B来处理。
2.2 示例代码
先定义类B:
class B {
public function doSomething($a, $b)
{
echo "B: doSomething($a, $b)\n";
}
}
然后定义类A:
class A {
private $b;
public function __construct()
{
$this->b = new B();
}
public function __call($method, $args)
{
if (method_exists($this->b, $method)) {
return call_user_func_array([$this->b, $method], $args);
}
}
}
最后在外部调用:
$obj = new A();
$obj->doSomething(1, 2);
运行结果:
B: doSomething(1, 2)
2.3 示例解释
在类A中定义了__call()方法,当类A对象调用不存在或不可见的方法时,会自动调用该方法。该方法判断方法是否存在于类B中,如果存在,则通过call_user_func_array()函数调用类B中的方法。这样就实现了将类B中的方法调用委托给类A。
这种委托的方式可以在多个类之间相互调用方法,使代码更加灵活。
3. 总结
PHP __call()方法是一个很有用的特性,可以用于动态调用那些不存在或不可见的方法。在类中加入该方法可以扩展类的功能。同时,通过委托的方式,可以将类中的方法调用委托给其他类来处理,从而使代码更加灵活和易于扩展。