PHP 魔术方法 - 析构函数 __destruct()

__destruct()PHP 面向对象编程的另一个重要的魔法函数,该函数会在类的一个对象被删除时自动调用。

我们可以在该函数中添加一些释放资源的操作,比如关闭文件、关闭数据库链接、清空一个结果集等

其实,__destruct() 在日常的编码中并不常见,因为它是非必须的,是类的可选组成部分。通常只是用来完成对象被删除时的清理动作而已。

而 PHP 的特性 「 运行完一次请求则销毁环境 」 的做法,也没必要使用 __destruct() 。反正执行完请求后所有该销毁的都会销毁。

调用时机

当销毁一个对象时才会调用对象的析构函数,一般情况下,销毁一个对象的触发时机为

  1. 主动调用 unset( $obj )
  2. 主动调用 $obj = NULL
  3. 程序自动结束

函数原型

__destruct() 的声明格式类似于构造函数 __construct , 该名字是固定的,以两个下划线开头,然后跟上 destruct 关键字

该函数没有任何参数,也不需要更不要返回任何值

该函数的原型如下

function __destruct()
{
    // 其它代码
}

范例

下面的代码,我们给 Person 类添加上析构函数 __destruct(),该函数只是一个提示,没有任何实际意义

<?php

class Person{     

    public $name;         
    public $age;         
    public $sex;         

    public function __construct($name="", $sex="Male", $age=22)
    {   
        $this->name = $name;
        $this->sex  = $sex;
        $this->age  = $age;
    }

    /**
     * say method
     */
    public function say()
    {
        echo "Name:".$this->name.",Sex:".$this->sex.",Age:".$this->age;
    }   

    /**
     * 声明一个析构函数
     */
    public function __destruct()
    {
            echo "再见,请记住我的名字:".$this->name . "\n";
    }
}

$person = new Person("Yufei");

// 销毁刚刚创建的对象
unset($person);


$person_hero = new Person('Hero');
// 销毁刚刚创建的对象
$person_hero = null;


$peson_libai = new Person('Libai'); // 程序结束会自动调用析构函数

运行结果如下

[yufei@localhost php]$ php demo.php
再见,请记住我的名字:Yufei
再见,请记住我的名字:Hero
再见,请记住我的名字:Libai
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.