重写 :(推荐学习:PHP编程从入门到精通)
子类继承父类, 定义和父类名称, 参数列表 完全一致的函数, 新的函数会覆盖旧的方法
<?php class human{ public function say($name){ echo $name,' 吃了吗?<br />'; } } class stu extends human{ public function say(){ echo '切克闹,卡猫百比<br />'; } /* public function say($a,$b,$c){ echo '哥仨好'; } 报错: Fatal error: Cannot redeclare stu::say() in D:\wamp\www\php\61.php on line 28 在PHP中,不允许存在多个同名方法,没有重载概念这一说。 */ } $li=new stu(); $li->say(); $li->say('binghui');// 上面这个过程叫重写override!
重载:
同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同
<?php //在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); ?>
联系 && 区别:
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性
重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法和相同的参数列表
重载对返回类型没有特殊的要求,不能根据返回类型进行区分
php不支持重载,若要实现类似功能使用 Trait 机制
The above is the detailed content of The difference between php method overloading and rewriting. For more information, please follow other related articles on the PHP Chinese website!