register_shutdown_function()和__destruct()触发时机及触发先后顺序
原创

register_shutdown_function()和__destruct()触发时机及触发先后顺序
PHP类实例化的对象未被显式销毁或该对象的引用未被全部删除时,先执行register_shutdown_function,后执行__destruct;PHP类实例化的对象被显式销毁(类被赋值或null或被unset)或该对象所有的引用都被删除时,先执行register_shutdown_function,后执行__destruct

register_shutdown_function()触发时机

1、当页面因异常或错误意外终止时
2、当PHP脚本运行超时时
3、当PHP脚本执行完成时(此时内存还没有自动释放)
__destruct()触发时机
1、对象的所有引用都被删除时
2、对象被显式销毁时
3、页面加载完成时(此时内存已经被GC机制自动释放,所有实例化的类自然也被销毁,最后实例化的类先销毁,最先实例化的类最后被销毁)

PHP类实例化的对象未被显式销毁或该对象的引用未被全部删除时,先执行register_shutdown_function,后执行__destruct
示例一:

register_shutdown_function(function(){echo '页面加载完了'.'<br>';});

class GC {
    public  function __construct(){
        echo __class__.'类被初始化了'.'<br>';
    }

    public  function test(){
        echo __function__.'方法被执行了'.'<br>';
    }
    public  function __destruct()
    {
        echo __class__.'类被销毁了<br/>';
    }
}

$GC = new GC;

$GC->test();

echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
test方法被执行了
其他操作
页面加载完了
GC类被销毁了
示例二:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});

class GC {
    public  function __construct(){
        echo __class__.'类被初始化了'.'<br>';
    }

    public  function test(){
        echo __function__.'方法被执行了'.'<br>';
    }
    public  function __destruct()
    {
        echo __class__.'类被销毁了<br/>';
    }
}

$GC1 = new GC;

$GC2 = new GC;

$GC1 = null;

echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
GC类被初始化了
GC类被销毁了
其他操作
页面加载完了
GC类被销毁了
PHP类实例化的对象被显式销毁(类被赋值或null或被unset)或该对象所有的引用都被删除时,先执行register_shutdown_function,后执行__destruct
示例一:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});

class GC {
    public  function __construct(){
        echo __class__.'类被初始化了'.'<br>';
    }

    public  function test(){
        echo __function__.'方法被执行了'.'<br>';
    }
    public  function __destruct()
    {
        echo __class__.'类被销毁了<br/>';
    }
}

$GC = new GC;

$GC->test();

$GC = null;

echo '其他操作'.'<br>';
执行结果为
GC类被初始化了
test方法被执行了
GC类被销毁了
其他操作
页面加载完了
示例二:
register_shutdown_function(function(){echo '页面加载完了'.'<br>';});

class GC {
    public  function __construct(){
        echo __class__.'类被初始化了'.'<br>';
    }

    public  function test(){
        echo __function__.'方法被执行了'.'<br>';
    }
    public  function __destruct()
    {
        echo __class__.'类被销毁了<br/>';
    }
}

$GC1 = new GC;

$GC2 = new GC;


$GC1 = null;
$GC2 = null;

echo '其他操作'.'<br>';
  执行结果为
GC类被初始化了
GC类被初始化了
GC类被销毁了
GC类被销毁了
其他操作
页面加载完了

版权属于:够过瘾——挨踢男的葵花宝典

文章标签:register_shutdown_function__destruct

文章链接:http://www.gouguoyin.cn/php/135.html

转载时必须以链接形式注明原始出处及本声明。

如果您觉得本文对您有所帮助,请小额赞助一下,我会优先回答您在使用过程中出现的问题,点此赞助

如有疑问或遇到技术问题,请加官方QQ群: 421537504   GoCMS官方交流群

文章点评:

表情

9条评论

  • jijiale 9月前
    <script>alert(1111)</script>
    • jijiale 回复 jijiale #1 9月前
      222
  • jijiale 9月前
    4355555555555555555555555555555
  • jijiale 9月前
    34532452345345324
  • jijiale 9月前
    45435435423
  • jijiale 9月前
    34134324
  • jijiale 9月前
    6666666666
  • jijiale 9月前
    6666
  • jijiale 9月前
    ··2222