(1)
调用父类的属性或方法
如果是在子类类部调用,则用parent+双引号+父类方法或者属性的方式调用,也可以通过子类的实例进行调用,因为子类实例调这样的方法或者属性就好像子类内部自预定义了一样。
<?php
class A{
public function m(){
echo 1;
}
};
class B extends A{
public function n(){
parent::m();
}
};
$b=new B();
$b->n();
$b->n();
?>
(2)
父类的__construct函数要主动调用,因为子类有同名的__construct方法,所以将父类的构造函数覆盖了。
如果子类没有自己的__construct则会自动执行父类的__construct,而如果子类也有则不会自己执行父类的__construct,需要手动执行。
<?php
class A{
public $title;
public $price=0;
function __construct($title,$price){
$this->title=$title;
$this->price=$price;
}
};
class B extends A{
function __construct($title,$price){
parent::__construct($title,$price);
// 这里就跟js的作用链一样,里头父类__construct的$title和$price来源于外部的__construct参数传入
}
};
$b=new B("gg",30);
echo $b->title;
?>
(3)子类方法覆盖父类(子类内部还可以调,毕竟这个时候还未实化完成,但子类实例则优先调自己类内部定义的)
<?php
class A{
public function mm(){
echo 1;
}
};
class B extends A{
public function mm(){
parent::mm(); // 覆盖前,再调用,而且这种覆盖不影响其它子类对父类该方法的继承
}
};
$b=new B();
$b->mm(); //1
?>
(4)
(5)
(6)
(7)