概念
重写/覆盖 override
指:子类重写了父类的同名方法
重载: overload
重载是指:存在多个同名方法,但参数类型/个数不同.传不同的参数,调用不同的方法
和java、c++的区别
但是在PHP中,不允许存在多个同名方法.
因此,不能够完成java,c++中的这种重载
但是,PHP的灵活,能达到类似的效果
重写详解
class Human{
public function say(){
echo "吃饭了吗?";
}
}
class Stu extends Human{
public function say(){
echo "我们跟着老外说:今天天气真好!!!";
}
}
$lisi=new Stu();
$lisi->say(); //我们跟着老外说:今天天气真好!!!
java中的重载
public class OverTest
{
public static void main(String[] args)
{
Calc calc = new Calc();
System.out.println(calc.area(10));
System.out.println(calc.area(5,8));
}
}
//根据传入参数值的不同,计算不同形状的面积
class Calc
{
public double area(float r)
{
return 3.14 * r * r;
}
public int area(int width,int height)
{
return width*height;
}
}
php实现java中重载出错,但是php可以灵活的达到类似的效果
class Calc {
public function area() {
// 判断一个调用area时,得到的参数个数
$args = func_get_args();
if(count($args) == 1) {
return 3.14 * $args[0] * $args[0];
} else if(count($args) == 2) {
return $args[0] * $args[1];
} else {
return '未知图形';
}
}
}
$calc = new Calc();
// 计算圆的页面
echo $calc->area(10),'<br />';
// 计算矩形的面积
echo $calc->area(5,8);