PHP中类的继承
1、1.基本概念
就是定义一个类的时候,从另一个“已有的类”,获得其特征信息(属性和方法)的过程。
继承的基本语法为:
class 新类名 extends 已有类名{
//.....新的类的成员定义
}
比如:

2、2.访问修饰控制符
对一个类来说,其中包含了若干的属性和方法(成员)。
应用中,
有些成员,是应该只给自己使用的;
有些成员,是可以给“一定的关系户”来使用的;
有些成员,是可以给“所有外界”使用的。
3个访问修饰符
用来控制这类特性的语法形式,就称为“访问修饰符”,就3个:
public: 公共的,表示该成员“哪里都可以用”;
之前用的var,就是public的一个“同义词”。
protected: 受保护的,半公共的,表示该成员“只有跟自己有关系的类的内部”可以使用;
private: 私有的,表示该成员“只有自己内部可以用”;
示例代码:
class A{
public $p1 = 1;
protected $p2 = 2;
private $p3 = 3;
}
但是,光设定这3个修饰符,并不能决定一个成员是否可访问,而是,还需要来确定访问的位置。
3个位置:
一个类的内部:
一个类的继承类的内部:
一个类的外部:
示例代码:
class A{
public $p1 = 1; //假设要用这个属性
protected $p2 = 2;
private $p3 = 3;
function f1(){
//这里就是类A的内部,对属性p1来说。
//这里可以访问$p1, $p2, $p3
}
}
class B extends A{
function f2(){
//这里就是类A继承关系的类的内部,对属性p1来说
//这里可以访问$p1, $p2
}
}
$a1 = new A();
$a1->p1 = 11; //这里就是类A的外部。
//这里只能访问$p1
一个类的成员可访问性的总结:

3、3.所谓访问,其实是指这样的代码形式“是否有效”的问题:
$对象->实例属性或实例方法(); //通过对象访问实例成员
类::静态属性或静态方法(); //通过类访问静态成员
演示访问特性:
这种可访问性,同样适用于对类中定义的方法的访问。
对于方法,可以省略修饰符,此时默认就算“public”;

4、4.parent关键字
parent代表“父类”。
它只能用在一个方法中。
其使用只有一个形式:
parent::父类的属性或方法(); //可以是实例的或静态的;
对于静态的:就表示是使用父类中的静态属性或静态方法;
对于实例的:此时,调用父类的实例方法时,必然要求该调用语句本身所在的方法是在一个对象的调用情况下——即:此时,该parent其实可以认为是代表(父类)对象。
注意:对于实例属性,不可以访问。

5、5.parent的典型应用:

6、6.参数传递路线:

7、7.构造方法和析构方法在继承中的表现
1,子类中如果没有构造方法,则子类在实例化的时候,会自动调用父类构造方法(如果有);
1.1,推论:此时,子类实例化时的实参,需要按照父类构造方法的对应形参给定;
2,子类中如果没有析构方法,则子类在被销毁的时候,会自动调用父类析构方法(如果有);
3,如果子类有构造方法,则不会自动调用父类构造方法,但我们可以在其中手动调用:parent::__construct()
4,如果子类有析构方法,则不会自动调用父类析构方法,但我们可以在其中手动调用:parent::__destruct()
下面演示自动调用父类构造方法的情形:

8、8.类和对象的访问总结图:
