内容正文:
/182
第3章 PHP面向对象编程
3.1 类与对象
3.2 继承与多态
/182
3.1 类与对象
第3章目录
3.1.1 类的定义
使用关键字class声明一个类:
<?php
class class_name{
//类的属性和方法
}
?>
使用new运算符来创建对象:
<?php
$instance=new class_name();
?>
访问对象的属性和方法:
$instance->property
$instance->method()
/182
3.1 类与对象
第3章目录
3.1.2 类的成员
属性声明
<?php
class class_name{
public|protected|private $property_name[=initializer];
}
?>
方法定义
<?php
class class_name{
[public|protected|private] function method_name([mixed $args[,$...]]){
//在此处编写方法体代码
}
}
?>
常量声明
const constant=value;
/182
3.1 类与对象
第3章目录
3.1.3 静态成员
使用static关键字可将类的属性或方法声明为静态的,这样,无需对类进行实例化即可访问这些属性或方法。静态属性不能由类的实例化对象来访问,但可由对象通过->操作符来访问静态方法。静态属性和静态方法不能在派生类中重新定义。
声明静态成员时,static关键字必须放在访问修饰符之后。如果未指定访问修饰符,则将类的属性和方法默认为public。由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。
在静态方法内部访问静态属性:
self::$property
在类定义外部访问静态属性或静态方法:
class_name::$property
class_name::method()
/182
3.1 类与对象
第3章目录
3.1.4 构造方法和析构方法
构造方法
在PHP 5中,可以在一个类中定义一个函数作为构造方法。具有构造方法的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。定义构造方法:
void __construct([mixed $args[,$...]]){
//在此处编写方法体的代码
}
析构方法
析构方法会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。定义析构方法:
void __destruct(void){
//在此处编写方法体的代码
}
/182
3.1 类与对象
第3章目录
3.1.5 自动加载对象
在PHP 5中,可以定义一个 __autoload函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在PHP出错失败前有了最后一个机会来加载所需的类。
3.1.6 对象迭代
PHP 5提供了一种迭代对象的功能,就像使用数组那样,可以通过foreach循环语句来遍历对象中的属性。语法如下:
<?php
foreach($obj as $key=>$value){
//每次循环中对象的属性名和属性值
//分别被赋给变量$key和$value
}
?>
/182
3.1 类与对象
第3章目录
3.1.7 对象复制
在PHP中,对象赋值总是通过引用形式实现的。当把一个对象已经创建的实例赋给一个新变量时,通过新变量可以访问同一对象实例。当通过新变量更改对象的属性值时,原变量所引用向对象的属性值随之发生变化。
若要生成对象的一个副本,则应以克隆方式实现。语法如下:
$copy_of_object=clone $object;
3.1.8 对象比较
在PHP 5中,对象的比较要比PHP 4中复杂,也比其他面向对象语言复杂。可分为以下两种情况:
当使用相等运算符(==)时,将以一种简单方式来比较对象变量,即:如果具有相同的属性和值,而且是同一个类的实例,则两个对象相同。
当使用全等运算符(===)时,只有当两个对象变量引用同一个类的同一个实例时,这两个对象变量才是相同的。
/182
3.2 继承与多态
3.2.1 类的继承
使用关键字extends来扩展一个类:
<?php
class derived_class extends base_class{
//类的属性和方法
}
?>
其中derived_class表示新建的类,称为派生类或子类;base_class表示新类所继承的类,称为基类或父类。
当扩展一个类时,派生类就会继承基类的所有公有和保护方法。但是派生类的方法会覆盖基类的方法。如果派生类中