php中定义了多种魔术方法,包括__sleep(),__tostring()等等,__call()是其中之一,今天主要说__call(),剩下的后面再唠。
不多说了,先看代码:
class TestCall{
public function __construct(){
}
public function __call($method, $param){
echo strval($method);
var_dump($param);
echo "call the call!";
}
}
$test = new TestCall();
$test->HEHE(1,2,3);
运行结果:
HEHEarray(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
call the call!
当调用一个类中没有定义的方法时,就会调用该类的__call方法,当然,首先你要重写__call方法。
__call方法有2个参数,method和param,对应真实的方法名字和参数。
到底应用在什么场景呢?
当需要使用统一的调用方式,但接口又有很多的时候,就可以使用该方法了。比如需要通过统一的入口function操作redis,但是redis中又包含了set、hset、hmset等方法,这时就在基类中实现一个__call()方法,当外部函数操作redis时,就是通过__call方法完成了对function的参数的指定。不需要再基类中重复的实现set、hset、hmset方法了。