您的位置 >>> 星想互联 >>> 编程技术 >>> PHP高级编程
PHP类中级实例教程七:类的重写(override)
点击数:1563  发布时间2017-08-02 22:33:44
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 
当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法具有相同的方法名称,在PHP5中不限制输入参数类型、参数数量和返回值类型。 
子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。
声明方法时,如果不定义访问权限。默认权限为public。
先设置一个父类,这个父类是 “Dog”类,这个类描述了dog的特性。Dog有2个眼睛,会跑,会叫。就这样描述先。我养了一直狗,是只小狗,符合Dog类的特性,但有所不同。我的小狗有名字,我的小狗太小了,不会大声的叫,只会哼哼。 我们用继承的概念去实现这个设计。

  1. <?php
  2. //狗有两只眼睛,会汪汪叫,会跑  
  3. class  Dog  
  4. {  
  5.     protected  $eyeNumber = 2; //  
  6.     //返回封装的属性方法  
  7.     public function getEyeNumber() {  
  8.         return $this->eyeNumber;  
  9.     }  
  10.     //狗会叫  
  11.     public function  yaff() {  
  12.         return  "Dog yaff, wang ..wang ..";  
  13.     }  
  14.     //狗会跑  
  15.     public function  run() {  
  16.         return  "Dog run..running ...";  
  17.     }  
  18. }  
  19. $dog = new Dog();  
  20. echo "dog have " . $dog->getEyeNumber() . " eyes. <br />";  
  21. echo $dog->yaff() . "<br />" . $dog->run();  
  22. echo  "<br /><br /><br /><br />";  
  23. //这是我的小狗,叫"狗狗",他还小不会汪汪叫,智慧哼哼。。  
  24. class MyDog extends Dog  
  25. {  
  26.     private $name = "";  
  27.     public function getName() {  
  28.         return $this->name;  
  29.     }  
  30.         public function  yaff() {  
  31.         return  $this->name . " yaff, heng...heng ..";  
  32.     }   
  33. }  
  34. $myDog = new MyDog();  
  35. echo $myDog->getName() . " have " . $myDog->getEyeNumber() . " eyes. <br />";  
  36. echo $myDog->yaff() . "<br />" . $myDog->run();  
  37. ?>  

重写方法与访问权限
子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。
来源:咸宁SEO