PHP面向对象之重写与重载

来源:互联网 发布:后醍醐天皇知乎 编辑:程序博客网 时间:2024/04/25 03:19
  1. <?php  
  2. /***  
  3. ====笔记部分====  
  4. 重写/覆盖  override  
  5. 指:子类重写了父类的同名方法  
  6. 重载: overload  
  7. 重载是指:存在多个同名方法,但参数类型/个数不同.  
  8. 传不同的参数,调用不同的方法  
  9. 但是在PHP中,不允许存在多个同名方法.  
  10. 因此,不能够完成java,c++中的这种重载  
  11. 但是,PHP的灵活,能达到类似的效果  
  12. ***/   
  13. /****  
  14. 代码部分  
  15. ****/   
  16.   
  17. class human{  
  18.   public function say($name){  
  19.    echo $name,' 吃了吗?<br />';  
  20.   }  
  21. }  
  22.   
  23. class stu extends human{  
  24.   
  25.   public function say(){  
  26.    echo '切克闹,卡猫百比<br />';  
  27.   }  
  28.   /* 
  29.   public function say($a,$b,$c){ 
  30.    echo '哥仨好'; 
  31.   } 
  32.   报错: 
  33.   Fatal error: Cannot redeclare stu::say() in D:\wamp\www\php\61.php on line 28 
  34.   在PHP中,不允许存在多个同名方法,没有重载概念这一说。 
  35.   */  
  36. }  
  37.   
  38. $li=new stu();  
  39. $li->say();  
  40. $li->say('binghui');// 上面这个过程叫重写override!   
  41. /* 
  42. 结果: 
  43. 切克闹,卡猫百比 
  44. 切克闹,卡猫百比 
  45. */  
  46.   
  47.   
  48. //在PHP中模拟重载的方法  
  49. class Calc {   
  50.     public function area() {   
  51.         // 判断一个调用area时,得到的参数个数   
  52.         $args = func_get_args();   
  53.         if(count($args) == 1) {   
  54.             return 3.14 * $args[0] * $args[0];   
  55.         } else if(count($args) == 2) {   
  56.             return $args[0] * $args[1];   
  57.         } else {   
  58.             return '未知图形';   
  59.         }   
  60.     }   
  61. }   
  62. $calc = new Calc();   
  63. // 计算圆的页面   
  64. echo $calc->area(10),'<br />';   
  65. // 计算矩形的面积   
  66. echo $calc->area(5,8);  
  67. ?>  

0 0