两个概念:重载、重写或覆盖
重写/覆盖
-
是指子类重写了父类的同名方法或属性
-
示例:
class A{
public function say(){
echo '苹果';
}
}
class B extends A{
public function say(){
echo '橘子';
}
}
$a = new B();
$a->say();//橘子
- 上面代码中,子类继承父类之后,say方法被继承到子类中,但是子类写了一个与父类重名的方法,则子类的方法覆盖了父类的方法,所以输出是橘子;如果子类中没有say方法,则不存在重写或者说覆盖,则输出苹果;
- 这个过程叫重写或是覆盖
重载
- 重载是指:存在多个同名函数,但是参数的(个数,类型)不同,同名函数不会被覆盖,传对应个数或者类型的参数,调用对应的方法;
- 但是,在PHP中不能直接支持重载,同名方法会出现重复定义的错误;
- PHP可以模拟真正的重载,但是PHP天然不支持重载;
- 通过
func_get_args()
这个内置方法,可以获得方法参数的个数,这个方法返回一个数组 - 可以在方法内部进行逻辑处理,判断参数的个数,或者可以进一步的判断数据类型,来做不同的逻辑操作