【黑马程序员济南】PHP课程同步笔记day28:PHP类的三
大特性
PHP类的三大特性:封装、继承、多态,今天我们来讲解一下其中的两大特性,继承和封装
继承
基本概念:
可以使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类。通过extends关键字实现继承关系。通俗来说,要有继承就得有一个“根源”,这“根源”你可能想像你以后生了儿子或者女儿,他们会从你这里得到一些“东西(属性和方法)”,这样你的“后代”就是持有你(根源)所有的一些特征了。
继承的基本语法:
class 新的类名 extends 另一个已有的类名{
//新的类的成员定义。
}
先看代码:
[PHP] 纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
//传智播客黑马程序员济南中
心出品
//动物类
class Dongwu{
var$point= "动";
}
//脊椎动物类
class Jizhui{
var$point1= "动";
var$point2= "有脊柱";
}
//鸟类
class Bird{
var$point1= "动";
var$point2= "有脊柱";
var$point3= "有翅膀";
}
[/size][/font][align=left][fo
nt=微软雅黑][size=3]
其中有一些“重合”的特征信息,我们可以改造为如下:
[PHP] 纯文本查看 复制代码
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
][font=微软雅黑][size=3]//
传智播客黑马程序员济南中心
出品
//动物类
class Dongwu{
var $point = "动";
}
//脊椎动物类
class Jizhui extends
Dongwu{
//var $point1 = "动";//
继承自动物类,这个就不用写
了
var $point2 = "有脊柱";
}
//鸟类
20
21
22
23
class Bird extends Jizhui{
//var $point1 = "动";//
继承自脊椎动物类,这两个就
不用写了
//var $point2 = "有脊柱
";
var$point3= "有翅膀";
}
$j1= new Jizhui();
var_dump($j1);
$b1= new Bird();
var_dump($b1);
输出结果:
object(Jizhui)#1 (2){
['piont2'] => string(9) "有脊柱"
['point1']=>string(6) "动"
}
object(Bird)#2 (4){
['point3'] => string(9) "有翅膀"
['point2'] => string(9) "有脊柱"
['point1']=>string(6) "动"
}
注意:PHP不能多层继承,如:class A extends B extends C,这样的继承在PHP中是无效的,PHP里只有单继承,不能多继承。
封装
把成员方法和成员属性封装到类中,隐藏属性和方法实现的细节,通过public、protected、private等限定类成员的访问权限,数据被保护在内部,只通过被授权的成员方法才可以操作,尽可能的对成员进行封装。
16
17
18
19
20
21
22
23
24
25
26
27
28 public$p4= 4; function ShowInfo(){ echo"B中访问A中的
p1:".$this->p1;//输出结果为1
echo"B中访问A中的p2: ".$this->p2;//输出结果为2
//echo "B中访问A中的p3: ".$this->p3;//报错,继承类中访问父类受保护的属性
echo"Bz中访问自己的p4: ".$this->p4;//输出结果为4
}
}
$b1= new B();
echo"b1->p1:".$b1->p1;//结果为1
//echo
"b1->p2:".$b1->p2;//报错,外部访问父类中三种修饰符属
性的结果
//echo
"b1->p3:".$b1->p3;//报错
echo
"b1->p3:".$b1->p4; //结
果为4
$b1->ShowInfo();
$a1= new A();
[/size][/font][align=left][fo
nt=微软雅
黑][size=3]$a1->ShowInfo(
);
其他注意事项:
1,访问控制修饰符只用于修饰属性和方法(含静态的和实例的),不用于修饰类常量; 2,属性前面必须有修饰符,之前的var就是public;
3,方法前面可以没有修饰符,如果没有,则默认当做“public”;