继承 :
面向对象编程方式最大的优点之一就是,可以使一个类继承并拥有另一个已存在类的成员变量和成员方法,其中被继承的类称为父类,继承的类称为子类。子类继承父类以后便获得父类所有的成员变量和成员方法。通过继承能够提高代码的重用性,以及可维护性。
通过类的继承,子类不仅可以拥有新定义的成员变量和成员方法,而且还具有父类所有的成员变量和成员方法。语法格式如下:
class
子类名称
extends
父类名称 {
//子类的成员变量列表
function
成员方法1([参数1,参数2,……]){
//成员方法1的具体实现
}
function
成员方法2([参数1,参数2,……]){
//成员方法2的具体实现
}
//其他成员方法
}
|
下面创建一个Student类,使其继承于已经存在的People类,代码如下:
class
People{
function
__construct(
$name
,
$age
){
$this
->name=
$name
;
$this
->age=
$age
;
}
function
say(){
echo
"姓名:"
.
$this
->name.
" "
;
echo
"年龄:"
.
$this
->age;
echo
" "
;
}
function
__destruct(){}
}
class
Student
extends
People {
function
study(
$lang
){
echo
"我正在整理"
.
$lang
.
"……"
;
}
}
$student
=
new
Student(
"大兵"
,25);
$student
->say();
$student
->study(
"PHP基础知识"
);
|
该代码执行结果为:
姓名:大兵 年龄:25
我正在整理PHP基础知识……
parent::关键字
关键字parent::用来表示父类和要调用的父类中的成员方法,语法格式如下:
parent::父类的成员方法([参数1,参数2,……])
|
下面使用parent::关键字调用父类People中的构造方法的例子,代码如下:
class
People{
function
__construct(
$name
){
$this
->name=
$name
;
}
function
__destruct(){}
}
class
Student
extends
People {
function
__construct(
$name
,
$age
){
parent::__construct(
$name
);
$this
->age=
$age
;
}
function
say(){
echo
"姓名:"
.
$this
->name.
" "
;
echo
"年龄:"
.
$this
->age;
echo
" "
;
}
function
study(
$lang
){
echo
"我正在整理"
.
$lang
.
"……"
;
}
function
__destruct(){}
}
$student
=
new
Student(
"大兵"
,25);
$student
->say();
$student
->study(
"PHP基础知识"
);
|
该代码执行结果为:
姓名:大兵 年龄:25
我正在整理PHP基础知识……
instanceof运算符
检测当前对象实例是否属于一个类可以使用instanceof运算符,它将返回一个布尔值,语法格式如下:
对象名称
instanceof
类名称
|
覆盖父类方法
在子类中可以根据需要对从父类继承来的方法进行覆盖,也叫方法的重写。在进行方法覆盖时要求覆盖方法和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
下面是实现子类Student覆盖父类People的say()方法的例子,代码如下:
class
People{
function
__construct(
$name
,
$age
){
$this
->name=
$name
;
$this
->age=
$age
;
}
function
say(){
echo
"姓名:"
.
$this
->name.
" "
;
echo
"年龄:"
.
$this
->age;
echo
" "
;
}
function
__destruct(){}
}
class
Student
extends
People {
function
say(
$lang
){
echo
$this
->name.
"正在整理"
.
$lang
.
"……"
;
}
}
$student
=
new
Student(
"大兵"
,25);
$student
->say(
"PHP基础知识"
);
|
该代码执行结果为:
大兵正在整理PHP基础知识……