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

2010-10-08 11:18

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


<?php

class animal{

public $name  = 'cat';//动物的公共属性,内外部可以访问、赋值

public $sex   = 'male';

public $voice = 'miao';

public function shout(){//动物的方法,内外部可以访问

echo $this->name;//调用属性时,不加再加$

echo ' says ';

echo $this->voice;

echo '<br />';

}

}

$animal = new animal;

$animal->name = 'littleCat';//外部赋值

$animal->shout();//外部调用方法

echo $animal->sex;//外部访问属性
echo '<br />';
?>

运行以上代码,将打印:

littleCat says miao
male

三大特性之一:封装

将上面第5行改成

private $name  = 'cat';//动物的私有属性,内部可以访问、赋值,外部不行

那么,第27行出错,因为不能在外部赋值。删除第27行之后,将打印:

cat says miao
male

封装把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。比如张三是一个对象,谁能修改他的工资,谁能查看,谁不能查看,就是一个封装程度的问题。

三大特性之二:继承

在动物类第32行后继续插入


class dog extends animal{

public $name  = 'dog';//重写原有属性

public $style = 'traditional';//新增属性

}

$dog = new dog;

$dog->shout();

echo $dog->style;

echo '<br />';

有个叫做“狗”的类继承了“动物”类。这样,狗拥有动物的属性和方法,不用再写很长一段代码了(复制粘贴小修改当然可以“省事”,但要是有很多很多动物,就不划算了)。

此部分代码打印:

dog says miao
traditional

继承的类可以理解为被继承者的特殊化,因为它除了拥有父类的所有特性(属性和方法),还具备自己独有的个性(比如改写原有的,新增自己的)。

以上的打印结果出现了笑话,因为狗是不会“喵”的。继承适合B是A的特殊种类,而不是A包含B,因为A会的东西,B也都会了。所以正确的做法是不定义动物类的具体名字、性别、叫声,而是分别写两个类(猫和狗)来继承动物类。

三大特性之三:多态

多态表示不同的对象做相同的事,但要用自己的方法做。比如动物都要叫,但叫声不同。按照我的理解,就是“重写”二字。比如同是求面积,长方形和圆形的“方法”不同,这就是多态。

“PHP这种弱类形的面向对象的语言里面,多态的特性并不是特别的明显,其实就是对象类型变量的变项应用。”

参考资料

1 程杰 《大话设计模式》 http://book.douban.com/subject/2334288/

2 百度文库 《PHP面向对象编程全面讲解》  http://wenku.baidu.com/view/9a114460ddccda38376baf36.html

2 条评论 / 引用:

  1. 面向对象编程的三大特性(PHP):

    […] echo $this->voice; 更多… View full post on 时光立方 […]

  2. 和好:

    php面向对象类型

评论

《对话守则》第一条:对话的目的是寻求真理。

以下选填: