PHP __call()方法实现委托示例

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()方法是一个很有用的特性,可以用于动态调用那些不存在或不可见的方法。在类中加入该方法可以扩展类的功能。同时,通过委托的方式,可以将类中的方法调用委托给其他类来处理,从而使代码更加灵活和易于扩展。

后端开发标签