如果你来这里是想学习基本的PHP4或者PHP5知识,那这就是为你准备的,开始享受吧!
现在,你知道了如何在PHP中创建自己的函数,而且你已经花费了时间忙碌地检查你的应用程序和将重复的代码片段转变为函数。但是函数仅仅是抽象的软件冰山一角,潜伏在下面的是一个3字母的缩写词,该缩写词使绝大部分的程序员新手感到害怕,即“OOP”( Object Oriented Programming,面向对象编程)。
如果你编程已经有一段时间了,那么你可能之前已经听说过术语OOP了---该术语OOP表示面向对象编程且其指一种技术,通过该技术你可以创建程序“对象”,然后在你的程序中使用这些对象来构建你需要的功能。PHP 5非常喜欢OOP概念---该概念提供了一种全新的对象模型,该模型最终使得PHP对象符合标准的OOP准则,也为面向对象的编程员提供了一套完整的新技术去使用。
想知道你如何才能使用这个吗?那么,不要再困惑了。你的祈祷已经得到回答了。
在本部分教程的课程中,为了展示它是如何的强大,我将结合例子及解释来简单地看看PHP的面向对象的能力(包括PHP 4和PHP 5)。我将会包含大部分的基本内容(类--Classe、对象--Object、属性--Attribute、方法--Method)和一些更加高级的概念(构造器--Constructor、析构器--Destructor、私有方法和属性属性----Private Method and propertie、继承--Inheritance)。如果你是面向对象编程方面的新手或者担心前面有什么障碍,别担心,我向你保证,这会比你想像的那种痛苦要轻得多。
相关概念
在开始之前,先让我们确定你已经对这里所涉及的概念有了清楚的理解了。
在PHP中,简单地讲,类是执行一特定任务的程序语句的集合。一个典型的类的定义包含变量和函数两部分,并且充当从中生成该类的特定实例的模板。类的这些特定实例被称为对象。每个对象都有确定的特征或者属性以及确定的预先定义的函数或方法。对象的这些属性和方法直接对应于类定义中的变量和函数。一旦类得到定义,PHP允许你生成你想生成的多个实例。这些实例中的每一个都是具有各自属性及方法的完全独立的对象,而且因此可以独立于其他对象而被操作。这在你需要生成对象的多个实例的情况(例如,两个并发查询的两个并发数据库链接,或者两个购物车)时可以用得着。
类也允许你保持你的代码的模块性(你可以在单独的文件中定义一个类,且仅在你打算使用该类的脚本中包含该文件)和简化代码的更改,因为你只需要编辑一单独的文件来为你所有生成的对象增加新功能即可。
关于“类”的实际例子
为了更好的理解,我们选择一个动物,任何动物都可以。我选择熊,因为我喜欢熊。现在,请问你自己,你能否在OOP的框架下,将这头熊看做是一个“对象”?为什么不呢?毕竟,每只熊都有特定的特征:年龄、体重、性别---这些都相当于对象属性。而且每只熊可以执行特定的活动:吃、睡、走、跑、交配---所有这些都相当于对象方法。
让我们再稍微进一步。因为所有的熊都共享某些特定的特征,所以设想一个Bear()模板是可能的,该模板定义了这个星球上每只熊的基本特征和能力。一旦这个Bear()(“类”)用于创建新的变量$bear(“对象”),那么新创建的熊的个体特征可以独立于其他用这个模板来创建的熊而被操作。
现在,如果你坐下来使用PHP 5编写该类代码,那么它可能会看起来像下面这个样子:
<?php
// PHP 5
// class definition
class Bear {
// define properties
public $name;
public $weight;
public $age;
public $sex;
public $colour;
// define methods
public function eat() {
echo $this->name." is eating... ";
}
public function run() {
echo $this->name." is running... ";
}
public function kill() {
echo $this->name." is killing prey... ";
}
public function sleep() {
echo $this->name." is sleeping... ";
}
}
?>
给出这个类后,现在可以很容易地生成和你想要的一样多的熊,然后调整每只熊的个体属性。请看:
<?php
// my first bear
$daddy = new Bear;
// give him a name
$daddy->name = "Daddy Bear";
// how old is he
$daddy->age = 8;
// what sex is he
$daddy->sex = "male";
// what colour is his coat
$daddy->colour = "black";
// how much does he weigh
$daddy->weight = 300;
// give daddy a wife
$mommy = new Bear;
$mommy->name = "Mommy Bear";
$mommy->age = 7;
$mommy->sex = "female";
$mommy->colour = "black";
$mommy->weight = 310;
// and a baby to complete the family
$baby = new Bear;
$baby->name = "Baby Bear";
$baby->age = 1;
$baby->sex = "male";
$baby->colour = "black";
$baby->weight = 180;
// a nice evening in the Bear family
// daddy kills prey and brings it home
$daddy->kill();
// mommy eats it
$mommy->eat();
// and so does baby
$baby->eat();
// mommy sleeps
$mommy->sleep();
// and so does daddy
$daddy->sleep();
// baby eats some more
$baby->eat();
?>
正如上面所展示的解释那样,一旦新的对象被定义,它们的个体方法和属性可以相互独立的被访问和修改。这个会派上用场的,本次教程的剩余部分将会说明这一点。