Heim >php教程 >php手册 >PHP面向对象之旅:类和对象

PHP面向对象之旅:类和对象

WBOY
WBOYOriginal
2016-06-13 10:55:011047Durchsuche

从OOP的视角看,不应区分语言。无论是C++、无论是Java、无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃。便没有对于Java、.net、PHP 之间谁强谁弱的争执了。

希望这个介绍PHP5面向对象编程(OOP)的资料能让初学者受益,能让更多的PHPer开始转向OO的编程过程。

相对PHP4,PHP5在面向对象方面改变了很多。我们将只介绍PHP5环境下的面向对象。而我们必须改变自己来跟随PHP5的发展。如果代码结果在你的环境下执行不一致,请确认你的环境为PHP5。

我们假设读者没有任何面向对象的知识,即使你是第一次听说OOP,也可以读懂这文章。但我希望你必须对PHP有一些了解。

在后面我们将使用一些例子,来逐渐分析PHP5的OO基础。

面向对象只解决了两个问题,代码的可扩展性 、代码的可维护性。

不得不说句,php越来越像Java了。

Everything is Object:万事万物皆对象。

面向对象的编程(OOP)思想力图使对计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。面向对象语言与我们的生活是想通的,面向对象语言学习起来其实很简单。在应用中更符合我们的生活逻辑。

类(Class)是用来描述一个对象(Object):

类描述了每个对象应包括的数据,类描述了每个对象的行为特征。

Class/Object:类(class)和对象(object)是面向对象方法的核心概念。

类是对一类事物描述,是抽象的、概念上的定义;

对象是实际存在的该类事物的每个个体,因而也称实例(instance)。在计算机中,可以理解为,在内存中创建了实实在在存在的一个内存区域存储着这个对象。

创建对象的过程称为创建对象,也称为实例化。

PHP5中的类和对象

我们先建立一个基础的类。

PHP中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。

view sourceprint?

1  

2 class Person  

3 { 

4    

5 } 

6 $p = new Person(); 

7 echo $p; 

8 ?> 

这样,我们就拥有了第一个PHP类。

我们继续来使用这个类,使用 new 这个关键字创建对象,用echo打印$p

我们定义了一个变量 $p ,使用 new 这个关键字创建了一个Person的对象。

打印变量$p,我们看到输出Object id #1 提示这是一个对象。

$p = new Person();也可以写成 $p = new Person;,但不建议使用后面的这种方式。

PHP5 中的属性

属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态)

在PHP5中,属性指在class 中声明的变量。在声明变量时,必须使用 public private protected 之一进行修饰,定义变量的访问权限。

•Public(公开): 可以自由的在类的内部外部读取、修改。

•Private(私有): 只能在这个当前类的内部读取、修改。

•Protected(受保护):能够在这个类和类的子类中读取和修改。

属性的使用:通过引用变量的 -> 符号调用变量指向对象的属性。

在方法内部通过 $this-> 符号调用同一对象的属性。

view sourceprint?

01  

02 class Person{ 

03    public $name = "Gonn"; //定义public属性 $name. 

04    public $age = 20; // 定义 public 属性 $age; 

05 } 

06 $p = new Person(); // 创建对象 

07 echo $p."
";    // 输出对象 

08 echo "他的名字是 ".$p->name;     // 输出对象$p的属性 $name; 

09 echo "
"; 

10 echo '他的年龄是 '$p->age; //输出age属性. 

11 ?> 

程序输出结果为:

view sourceprint?

1 他的名字是 Gonn 

2 他的年龄是 24 

Person类有两个属性,$name 和 $age , 在实例化后,使用$p->name 和 $p->age 打印出属性的内容。

当然,你可以在属性定义时不设置初始值,那样的话,就打印不出任何结果了。

改变对象的属性,注意 8行和9行代码,还有输出结果的变化。我们看到输出的属性值被改变了。

view sourceprint?

01  

02 // 1-4.php 

03 class Person{ 

04    public $name = "NoName"; //定义public属性 $name. 

05    public $age = 20; // 定义 public 属性 $age; 

06 } 

07 $p = new Person(); // 创建对象 

08 $p->name = 'Tom'; //变更姓名为 Tom 

09 $p->age = 25 ; // 变更年龄为 25 岁. 

10 echo "他的名字是 ".$p->name;     // 输出对象$p的属性 $name; 

11 echo "
"; 

12 echo '他的年龄是 '.$p->age; //输出age属性. 

13 ?> 

创建一个Person的对象,改变这个对象的属性。为它命名,查看它的名字。你就是机器里面这个Person对象的上帝,按照你定义的规则,这个实实在在内存中的Person对象被创建了,而且它有了可以改变的属性。

现在,我们就是计算机世界的上帝,准备好创造世界吧。

Private 修饰的属性,在当前对象以外不能访问。设置私有属性是为了进行数据的隐藏。

隐藏:指对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问。

view sourceprint?

1  

2 // 1-3.php 

3 class Person{ 

4    private $name = "Gonn"; //定义public属性 $name. 

5    public $age = 20; // 定义 public 属性 $age; 

6 } 

7 $p = new Person(); // 创建对象 

8 echo "他的名字是 ".$p->name;     // 输出对象$p的属性 $name; 

9 ?> 

运行此程序将会输出:

view sourceprint?

1 Fatal error: Cannot access private property Person::$name in E:\PHPProjects\test.php on line 9

私有属性不能被外部访,这样做的好处后面会介绍到。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn