3、什么是类的重载
重载是类的多态的一种实现。
函数重载指一个标识符被用作多个函数名,且能够通过函数的参数个数或参数类型将这些同名的函数区分开来,调用不发生混淆。
即当调用的时候,虽然方法名字相同,但根据参数的不同可以自动调用相应的成员函数。
在php中,虽然不是很好实现重载的需求,但也是有2种方式可以实现:
1、使用func_num_args() 和 func_get_args()函数实现,获得参数个数和参数内容。
2、使用class类所提供的__call()魔术方法。
重写与重载的区别是在于:
重写只存在于子类与父类中,
重载存在于一个类中。
第二种实现方式属于后续的课件内容, 这里就不做讲解了,我们下面先来学习下第一种实现方法:
<?php
class Demo{
public function method(){
$numargs = func_num_args(); // 获得参数数量
$args = func_get_args(); // 获得参数数组
switch ($numargs) {//通过变量个数来确定调用哪个方法
case 2:
$this->method2($args[0], $args[1]);
break;
case 3:
$this->method3($args[0], $args[1], $args[2]);
break;
}
}
private function method2($var1, $var2){
echo 1;
}
private function method3($var1, $var2, $var3){
echo 2;
}
}
# 根据参数自动调用不同的方法
$obj = new Demo();
$obj->method(1, 2);
$obj->method(1, 2, 3);