6.10.7 使用__call()重载方法
前面,我们介绍了一些具有特殊意义的类方法,这些方法的名称都是以双下画线开始的(),例如,get()、set()、construct()和destruct()。另一个示例就是call()方法,在PHP中,该方法用来实现方法的重载。
方法的重载在许多面向对象编程语言中都是常见的,但是在PHP中却不是非常有用,因为我们习惯使用灵活的类型和(容易实现的)可选的函数参数。
要使用该方法,必须实现__call()方法,如下例所示:
public function_call($method,$p)
{
if($method=="display"){
if(is_object($p[0])){
$this->displayObject($p[0]);
}else if(is_array($p[0])){
$this->displayArray($p[0]);
}else{
$this->displayScalar($p[0]);
}
}
}
__call()方法必须带有两个参数。第一个包含了被调用的方法名称,而第二个参数包含了传递给该方法的参数数组。我们可以决定调用哪一个方法。在这种情况下,如果一个对象传递给display()方法,可以调用displayObject()方法;如果传递的是一个数组,可以调用displayArray();如果传递的是其他内容,可以调用displayScalar()方法。
要调用以上这段代码,首先必须实例化包含这个__call()方法(命名为重载)的类,然后再调用display()方法,如下例所示:
$ov=new overload;
$ov->display(array(1,2,3));
$ov->display('cat');
第一个display()方法的调用将调用displayArray()方法,而第二个将调用displayScalar()方法。
请注意,要使以上代码能够使用,不用实现任何display()方法。