1 <?php
2 /***
3 重写/覆盖 override
4 指:子类重写了父类的同名方法
5
6 重载 overload
7 指:存在多个同名方法,但参数类型或个数不同
8 传不同的参数,调用不同方法
9 但是在PHP中,不允许存在多个同名方法
10 因此,不能够完成java,c++的这种重载
11
12 但是,PHP的灵活,能达到类似的效果,用func_get_args()
13 ***/
14
15 class Human {
16 public function say() {
17 echo '吃了吗';
18 }
19 }
20 class Stu extends Human {
21 public function say() {
22 echo 'hello<br />';
23 }
24 /*
25 public function say($a,$b,$c) {//报错,php中不能有重名方法Cannot redeclare Stu::say()
26 echo '哥仨好';
27 }
28 */
29 }
30 $ming = new Stu();
31 $ming->say();
32 $ming->say('lisi');//上面的这个过程叫重写
33
34
35 /**
36 *重载
37 */
38 class Calc {
39 public function area(){
40 $args = func_get_args();// 判断调用函数area时,得到的参数个数
41 if (count($args) == 1) {//如果传过来一个参数,代表圆
42 return 3.14 * $args[0] * $args[0];//计算圆的面积
43 }elseif (count($args) == 2) {//如果传过来2个参数,代表矩形
44 return $args[0] * $args[1];//计算矩形面积
45 }else {
46 return '未知图形';
47 }
48 }
49 }
50
51 $calc = new Calc();
52 echo $calc->area(10),'<br />';//圆形面积314
53 echo $calc->area(10,10);//矩形面积100
54 ?>