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,建议养成好习惯,不要不写