以前我们介绍过一些具有特殊意义的类方法,这些方法的名称都是以双下画线开始的(_),例如,_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()方法必须带有两个参数。第一个包含了被调用的方法名称,而第二个参数包含了传递给该方法的参数数组。我们可以决定调用哪一个方法;如果传递的是一个数组,可以调用displayArray();如果传递的是其他内容,可以调用displayScalar()方法。
要调用以上这段代码,首先必须实例化包含这个-call()方法(命名为重载)的类,然后在调用display()方法,如下例所示:
$ov = new overload;
$ov->display(array(1, 2, 3));
$ov->display(’cat’);
第一个display()方法的调用将调用displayArray()方法,而第二个将调用displayScalar()方法。