加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php析构函数行为

发布时间:2020-12-13 13:44:55 所属栏目:PHP教程 来源:网络整理
导读:我试图了解php构造函数和析构函数的行为.一切都按照构造函数的预期进行,但是我无法隐式地触发析构函数.我已经完成了php.net和相关网站上的所有阅读,但我无法找到这个问题的答案. 如果我有一个简单的类,例如: class test{ public function __construct(){ pr
我试图了解php构造函数和析构函数的行为.一切都按照构造函数的预期进行,但是我无法隐式地触发析构函数.我已经完成了php.net和相关网站上的所有阅读,但我无法找到这个问题的答案.

如果我有一个简单的类,例如:

class test{

     public function __construct(){
          print "contructing<br>";
     }

     public function __destruct(){
          print "destroying<br>";
     }
}

我称之为:

$t = new test;

它打印构造函数消息.但是,我希望当脚本结束并呈现页面时,析构函数应该触发.当然不是.

如果我打电话未设置($t);当脚本结束时,析构函数当然会触发,但有没有办法让它隐式触发?

谢谢你的任何提示

这很容易测试.
<?php

class DestructTestDummy {
    protected $name;

    function __construct($name) {
        echo "Constructing $namen";
        $this->name = $name;
    }

    function __destruct() {
        echo "Destructing $this->namen";
        //exit;
    }
}

echo "Start scriptn";

register_shutdown_function(function() {
    echo "Shutdown functionn";
    //exit
});

$a = new DestructTestDummy("Mr. Unset");
$b = new DestructTestDummy("Terminator 1");
$c = new DestructTestDummy("Terminator 2");

echo "Before unsetn";
unset($a);
echo "After unsetn";


echo "Before funcn";
call_user_func(function() {
    $c = new DestructTestDummy("Mrs. Scopee");
});
echo "After funcn";

$b->__destruct();

exit("Exitingn");

在PHP 5.5.12中打印:

Start script
Constructing Mr. Unset
Constructing Terminator 1
Constructing Terminator 2
Before unset
Destructing Mr. Unset
After unset
Before func
Constructing Mrs. Scopee
Destructing Mrs. Scopee
After func
Destructing Terminator 1
Exiting
Shutdown function
Destructing Terminator 2
Destructing Terminator 1

因此,我们可以看到,当我们显式取消设置对象,超出范围时以及脚本结束时,将调用析构函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读