PHP面向对象编程的三大特性
浏览:3326次 出处信息
这里有一个叫做“动物”的类:
01 |
<?php |
02 |
|
03 |
class animal{ |
04 |
|
05 |
public $name = 'cat' ; //动物的公共属性,内外部可以访问、赋值 |
06 |
|
07 |
public $sex = 'male' ; |
08 |
|
09 |
public $voice = 'miao' ; |
10 |
|
11 |
public function shout(){ //动物的方法,内外部可以访问 |
12 |
|
13 |
echo $this ->name; //调用属性时,不加再加$ |
14 |
|
15 |
echo ' says ' ; |
16 |
|
17 |
echo $this ->voice; |
18 |
|
19 |
echo '<br />' ; |
20 |
|
21 |
} |
22 |
|
23 |
} |
24 |
|
25 |
$animal = new animal; |
26 |
|
27 |
$animal ->name = 'littleCat' ; //外部赋值 |
28 |
|
29 |
$animal ->shout(); //外部调用方法 |
30 |
|
31 |
echo $animal ->sex; //外部访问属性 |
32 |
echo '<br />' ; |
33 |
?> |
运行以上代码,将打印:
1 |
littleCat says miao |
2 |
male |
三大特性之一:封装
将上面第5行改成
1 |
private $name = 'cat' ; //动物的私有属性,内部可以访问、赋值,外部不行 |
那么,第27行出错,因为不能在外部赋值。删除第27行之后,将打印:
1 |
cat says miao |
2 |
male |
封装把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。比如张三是一个对象,谁能修改他的工资,谁能查看,谁不能查看,就是一个封装程度的问题。
三大特性之二:继承
在动物类第32行后继续插入
01 |
class dog extends animal{ |
02 |
|
03 |
public $name = 'dog' ; //重写原有属性 |
04 |
|
05 |
public $style = 'traditional' ; //新增属性 |
06 |
|
07 |
} |
08 |
|
09 |
$dog = new dog; |
10 |
|
11 |
$dog ->shout(); |
12 |
|
13 |
echo $dog ->style; |
14 |
|
15 |
echo '<br />' ; |
有个叫做“狗”的类继承了“动物”类。这样,狗拥有动物的属性和方法,不用再写很长一段代码了(复制粘贴小修改当然可以“省事”,但要是有很多很多动物,就不划算了)。
此部分代码打印:
1 |
dog says miao |
2 |
traditional |
继承的类可以理解为被继承者的特殊化,因为它除了拥有父类的所有特性(属性和方法),还具备自己独有的个性(比如改写原有的,新增自己的)。
以上的打印结果出现了笑话,因为狗是不会“喵”的。继承适合B是A的特殊种类,而不是A包含B,因为A会的东西,B也都会了。所以正确的做法是不定义动物类的具体名字、性别、叫声,而是分别写两个类(猫和狗)来继承动物类。
三大特性之三:多态
多态表示不同的对象做相同的事,但要用自己的方法做。比如动物都要叫,但叫声不同。按照我的理解,就是“重写”二字。比如同是求面积,长方形和圆形的“方法”不同,这就是多态。
“PHP这种弱类形的面向对象的语言里面,多态的特性并不是特别的明显,其实就是对象类型变量的变项应用。”
参考资料
1 《大话设计模式》
2 PHP面向对象编程全面讲解 http://wenku.baidu.com/view/9a114460ddccda38376baf36.html
建议继续学习:
- 在C++里写一个不能被继承的类 (阅读:5739)
- 面向对象的Shell脚本 (阅读:5141)
- 用星际争霸讲解面向对象的概念 (阅读:4137)
- 使用PHP创建一个面向对象的博客 (阅读:4054)
- 两行 JavaScript 代码 (阅读:3330)
- 两行 JavaScript 代码 (阅读:3312)
- 多重继承及虚继承中对象内存的分布 (阅读:3119)
- 面向对象设计模式的核心法则 (阅读:3151)
- PHP内核介绍及扩展开发指南―类和对象 (阅读:2949)
- “C++的数组不支持多态”? (阅读:2731)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:对老域名用PHP写了个301重定向
后一篇:PHP将死,何以为继? >>
文章信息
- 作者:崔凯(小轰) 来源: 时光立方
- 标签: 多态 对象 封装 继承
- 发布时间:2010-10-07 22:19:25
建议继续学习
近3天十大热文
- [68] 如何拿下简短的域名
- [68] Go Reflect 性能
- [64] Oracle MTS模式下 进程地址与会话信
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [60] IOS安全–浅谈关于IOS加固的几种方法
- [58] android 开发入门
- [53] 视觉调整-设计师 vs. 逻辑
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 界面设计速成