多态是面向对象的三大特性之一(继承性,封装性,多态性),而方法的重载又是多态的两种形式之一(覆盖,重载).
所谓重载:指一个标识符被用作多个函数名,且能够通过函数的参数个数或者参数类型将这些同名的函数区分开来
其实,个人认为上面的解释,有严重误导读者的嫌疑,因为.在PHP的一个类中,不可能存在名字一样的函数
class Lausen{
public function play($num){
}
public function play($num1,$num2)
{
}
}
所以说.PHP其实不直接支持函数的重载,但是可以通过魔法方法
function __call($name, $arguments)
{
// TODO: Implement __call() method.
}
来进行间接的支持,通过调用一个没有定义的方法,来判断传进来的参数类型或者参数个数,来进行不同的方法的调用,如下例:
class overLoad{
public $object = "对象";
public $arr = "数组";
public $str = "字符串";
public function __call($name, $arguments)
{
// TODO: Implement __call() method.
if ($name == "disPlay"){
if (is_object($arguments[0])){
return $this->object;
}else if (is_array($arguments[0])){
return $this->arr;
}else {
return $this->str;
}
}
}
}
//1:类的实例化
$ov = new overLoad;
echo $ov->disPlay("lausen")."<br>";
echo $ov->disPlay(array(1,2,3))."<br>";
echo $ov->disPlay($ov);
打印结果