PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php析构函数行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解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 $name\n";
        $this->name = $name;
    }

    function __destruct() {
        echo "DestrucTing $this->name\n";
        //exit;
    }
}

echo "Start script\n";

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

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

echo "Before unset\n";
unset($a);
echo "After unset\n";


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

$b->__destruct();

exit("ExiTing\n");

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

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

大佬总结

以上是大佬教程为你收集整理的php析构函数行为全部内容,希望文章能够帮你解决php析构函数行为所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。