PHP面向对象之析构函数和对象引用
1. 析构函数的介绍
在PHP中,析构函数是一种特殊的函数,用于在对象被销毁时自动调用,而不需要程序员手动进行处理。
析构函数的命名方式与构造函数相同,都是__construct(),只不过在前面多了一个下划线,例如:
class MyClass {
function __construct() {
echo '构造函数被调用了';
}
function __destruct() {
echo '析构函数被调用了';
}
}
$obj = new MyClass();
//输出:构造函数被调用了
//销毁$obj对象
//输出:析构函数被调用了
1.1 析构函数的作用
析构函数的作用是允许对象在销毁之前进行特定的清理操作,例如释放资源、写日志等等。
1.2 析构函数的注意事项
1. 析构函数不接受任何参数。
2. 析构函数无法手动调用,只能等到对象被销毁时自动调用。
3. 如果一个类没有定义析构函数,PHP会自动为其定义一个空的析构函数。
4. 如果一个父类和它的子类都定义了析构函数,当子类的对象被销毁时,PHP会依次调用父类和子类的析构函数,也就是说,会先调用子类的析构函数,再调用父类的析构函数。
5. 在PHP5.3以前,不能在析构函数中引发异常,否则会导致程序崩溃,需要在PHP5.3以后的版本中才支持。
2. 对象引用的介绍
在PHP中,可以将变量与对象建立引用关系,这样当引用变量发生变化时,对象也会相应地发生变化。
引用的概念在PHP中很重要,因为它可以让我们在不复制数据的情况下传递数据,从而节省内存和CPU资源。
定义一个对象引用的方法很简单,只需要在变量前加一个&符号即可:
$obj1 = new MyClass();
$obj2 =& $obj1;
这样,$obj1和$obj2就建立了引用关系,当$obj1被修改时,$obj2也会跟着修改。
需要注意的是,引用只是一个别名,不会改变变量的本质。例如:
$a = 'hello';
$b =& $a;
$b = 'world';
echo $a;
//输出:world
在上面的例子中,$a被赋值为'hello',然后$b被赋值为$a的引用,即$b和$a指向同一个内存位置。
然后$b被赋值为'world',但是$a并没有被改变,因为$b只是$a的一个引用,修改了$b只是修改了$a的值,而并不会改变$a的本质。