技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> PHP面向对象编程的三大特性

PHP面向对象编程的三大特性

浏览:3351次  出处信息

这里有一个叫做“动物”的类:

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

建议继续学习:

  1. 在C++里写一个不能被继承的类    (阅读:5753)
  2. 面向对象的Shell脚本    (阅读:5155)
  3. 用星际争霸讲解面向对象的概念    (阅读:4153)
  4. 使用PHP创建一个面向对象的博客    (阅读:4070)
  5. 两行 JavaScript 代码    (阅读:3338)
  6. 两行 JavaScript 代码    (阅读:3320)
  7. 多重继承及虚继承中对象内存的分布    (阅读:3130)
  8. 面向对象设计模式的核心法则    (阅读:3172)
  9. PHP内核介绍及扩展开发指南―类和对象    (阅读:2980)
  10. “C++的数组不支持多态”?    (阅读:2738)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1