IT技术博客大学习 共学习 共进步

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

时光立方 2010-10-07 22:19:25 浏览 4,542 次

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

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++里写一个不能被继承的类 (阅读 6,483)
  2. 面向对象的Shell脚本 (阅读 5,985)
  3. 使用PHP创建一个面向对象的博客 (阅读 5,323)
  4. 用星际争霸讲解面向对象的概念 (阅读 5,101)
  5. 两行 JavaScript 代码 (阅读 4,600)
  6. 面向对象设计模式的核心法则 (阅读 4,344)
  7. 多重继承及虚继承中对象内存的分布 (阅读 4,062)
  8. 两行 JavaScript 代码 (阅读 4,040)
  9. PHP内核介绍及扩展开发指南―类和对象 (阅读 4,005)
  10. Javascript 面向对象编程(一):封装 (阅读 3,702)