php之继承

 

  继承:是指以一个类为父类,另一个类可以作为其子类,子类在继承了父类的属性/方法的基础上进一步增添或修改
  语法:
  子类 extends 父类{
  }
  注意:子类只能继承一个父类
  subClass extends pClass1,pClass2,pClass3{
  }

  这是不行的

 1 <?php
 2 class Human {
 3     private $height = 179;
 4     public function cry() {
 5         echo '5555<br />';
 6     }
 7 }
 8 class Stu extends Human{
 9 
10 }
11 $lisi =new Human();
12 $lisi->cry();
13 $lily =new Stu();
14 $lily->cry();
15 ?>

  public,protected,private中

  子类可以继承父类的private,但不能直接访问,可以通过调用父类的函数,在父类的函数里可以访问

  子类可以继承父类的public和protected,并拥有访问和修改的权限

  

 1 <?php
 2 class Human{
 3     private $wife = '小甜甜';
 4     public function tell() {
 5         echo $this->wife,'<br />';
 6     }
 7     public function cry(){
 8         echo '5555<br />';
 9     }
10 }
11 class Stu extends Human{
12     public function subtell(){
13         echo $this->wife,'<br />';
14     }
15 }
16 $lisi = new Stu();
17 $lisi->cry();//5555
18 $lisi->tell();//小甜甜
19 $lisi->subtell();//Notice: Undefined property: Stu::$wife ,subtell中$this->wife是父类的私有属性,不能直接访问
20 ?>
 1 <?php
 2 class Human{
 3     private $wife = '小甜甜';
 4     public $age = 22;
 5     public function cry(){
 6         echo '5555<br />';
 7     }
 8     public function pshow(){
 9         echo $this->wife,'<br />';
10     }
11 }
12 class Stu extends Human{
13     private $wife = '林妹妹';
14     public $height = 170;
15     public function subtell(){
16         echo $this->wife,'<br />';
17     }
18     public function sshow(){
19         parent::pshow();
20         echo $this->wife,'<br />';
21     }
22 }
23 $lisi = new Stu();
24 //print_r($lisi);
25 $lisi->sshow();//小甜甜,林妹妹 这里利用sshow去调用父类的public的pshow,而pshow是在父类的{}内,可以调用私有属性$this->wife,如果把父类的$wife删掉就会报错,Cannot access private property Stu::$wife 
26 ?>

  子类继承父类的属性/方法时,权限只能越来越宽松或不变,不能越来越严格,比如父类的属性/方法为public,子类继承时只能为public,而不能为protected/private

  构造方法的继承
  构造方法也是可以继承的
  new子类时,如果构造函数继承过来,当然也要自动执行
  但继承过来后,子类重写了,自然执行子类的构造方法
  (注意,父类的构造方法不再调用)

  private protected public三者的区别
      private   protected   public
  本类内      y           y             y
  子类内      n           y             y
  类外         n           n             y
  在java中,如果属性/方法前面不写任何参数即private protected public都不写,也是可以得,理解为friendly
  在php中,如果private protected public都不写,则理解为public,建议养成好习惯,不要不写

posted @ 2015-05-23 11:13  museluo  阅读(252)  评论(0编辑  收藏  举报