PHP面向对象中的析构方法

本文详细介绍了PHP中的析构方法__destruct(),包括其语法、使用场景及注意事项,并通过实例展示了析构方法如何在对象销毁时执行特定操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PHP 析构方法 __destruct() 允许在销毁一个类之前执行执行析构方法。

析构方法

与构造方法对应的就是析构方法,析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。析构函数不能带有任何参数,其名称必须是 __destruct() 。

语法:

function __destruct()
{
    ......
}

举个例子:

class person {

    public $name;

    //定义一个析构方法
    public function __construct()
    {
        echo "good bye".$this->name;
    }

}class Person {

    public $name;

    //定义一个构造方法
    public function __construct($name)
    {
        $this->name = $name;
    }

    //再定义一个析构方法
    public function __destruct()
    {
        echo "good bye ".$this->name;
    }

}

$name = 'lightWay';
$person = new Person($name);

再次运行该例子,输出:

good bye lightWay

让我们把代码放在html当中:

<html>
<head>
    <title>test</title>
</head>
<body>
<?php
class Person {

    public $name;

    //定义一个构造方法
    public function __construct($name)
    {
        $this->name = $name;
    }

    //再定义一个析构方法
    public function __destruct()
    {
        echo "good bye ".$this->name;
    }

}

$name = 'lightWay';
$person = new Person($name);
?>
</body>
</html>

运行在看看浏览器源码

<html>
<head>
    <title>test</title>
</head>
<body>
</body>
</html>



good bye lightWay

我们会发现更为诡异的现象,没错,析构方法输出的内容在html标签外边,很明显,这压根不是我们代码中的执行过程,这也侧面说明了,析构方法是php脚本运行结束后php的资源处理过程

在看看销毁的顺序

class Person {

    public $name;

    //定义一个构造方法
    public function __construct($name)
    {
        $this->name = $name;
    }

    //再定义一个析构方法
    public function __destruct()
    {
        echo "<br />good bye ".$this->name;
    }

}

$name = 'lightWay';
$person1 = new Person($name);
$name = 'tom';
$person2 = new Person($name);
$name = 'bob';
$person3 = new Person($name);
$name = 'jim';
$person4 = new Person($name);
$name = 'john';
$person5 = new Person($name);
unset($person2);//提前销毁$person变量

再次运行该例子,输出:

good bye tom 
good bye john
good bye jim
good bye bob
good bye lightWay
可以看得出来,销毁顺序是是变量声明的倒序,提前unset就会提前进入析构流程提示

  1. 和构造方法一样,PHP 不会在本类中自动的调用父类的析构方法。要执行父类的析构方法,必须在子类的析构方法体中手动调用 parent::__destruct() 。
  2. 试图在析构函数中抛出一个异常会导致致命错误。
  3. 在 PHP4 版本中,构造方法的名称必须与类名相同,且没有析构方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值