面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个目标:重用性、灵活性和扩展性。
PHP 在 4.0 版本之后完善了对 OOP 的支持了。对于小型的应用,使用传统的过程化编程可能更简单也更有效率。然而对于大型的复杂应用时,OOP 就是一个不得不考虑的选择。
类类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
对象对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。
关于面向对象的编程涉及的内容很广泛,本教程只介绍基本的概念与在 PHP 中的应用。
类使用关键字 class 来声明一个类,后面紧跟类的名字,主体用 {} 符号括起来。
语法:
class class_name{ ...... }
类里面包含了属性和方法。
属性通过在类定义中使用关键字 var 来声明变量,即创建了类的属性,也叫类的成员属性。
语法:
class class_name{ var $var_name; }
举个例子说明,如果定义一个 人 的类,那么人的 姓名、年龄、性别 等等便可以看做 人 这个类的属性。
方法通过在类定义中声明函数,即创建了类的方法。
语法:
class class_name{ function function_name(arg1,arg2,……) { 函数功能代码 } }类的应用
一个定义了属性和方法的类就是一个完整的类了,可以在一个类里面包含一个完整的处理逻辑。使用 new 关键字来实例化一个对象以便应用类里面的逻辑。可以同时实例化多个对象。
语法:
object = new class_name();
实例化一个对象后,使用 -> 操作符来访问对象的成员属性和方法。
语法:
object->var_name; object->function_name;
如果要在定义的类里面访问成员的属性或者方法,可以使用伪变量 $this 。$this 用于表示 当前对象 或 对象本身 。
例子:
<?php class Person { //人的成员属性 var $name; //人的名字 var $age; //人的年龄 //人的成员 say() 方法 function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年龄是:".$this->age; } } //类定义结束 //实例化一个对象 $p1 = new Person(); //给 $p1 对象属性赋值 $p1->name = "张三"; $p1->age = 20; //调用对象中的 say()方法 $p1->say(); ?>
运行该例子,输出:
我的名字叫:张三 我的年龄是:20PHP 类的继承
PHP 类的继承是指建立一个新的派生类,从一个或多个先前定义的类中继承数据和方法,而且可以重新定义或加进新数据和方法,从而建立了类的层次或等级。 通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。 注意:不同于 Java 等语言,在 PHP 中,一个类只能直接从一个类中继承数据,即单继承。 使用 extends 关键字来定义类的继承:
class 子类 extends 父类{ }
例子:
<?php class Person { var $name; var $age; function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年龄是:".$this->age; } } // 类的继承 class Student extends Person { var $school; //学生所在学校的属性 function study() { echo "我的名子叫:".$this->name."<br />"; echo "我正在".$this->school."学习"; } } $t1 = new Student(); $t1->name = "张三"; $t1->school = "人民大学"; $t1->study(); ?>
运行该例子,输出:
我的名子叫:张三 我正在人民大学学习构造方法
构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct() 。 语法:
function __construct(arg1,arg2,...) { ...... }
例子:
<?php class Person { var $name; var $age; //定义一个构造方法初始化赋值 function __construct($name, $sex, $age) { $this->name=$name; $this->age=$age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年龄是:".$this->age; } } $p1=new Person("张三", 20); $p1->say(); ?>
运行该例子,输出:
我的名字叫:张三 的年龄是:20
在该例子中,通过构造方法对对象属性进行初始化赋值。