您现在的位置是:首页 > 程序 > php网站首页php

register_shutdown_function() 函数的学习及使用

  • 袁志蒙
  • 2018-02-27 22:22:47
  • 2594 次阅读
register_shutdown_function定义:该函数是来注册一个会在PHP中止时执行的函数参数说明:register_shutdown_function ($callback, $para...

register_shutdown_function

定义:该函数是来注册一个会在PHP中止时执行的函数


参数说明:register_shutdown_function ($callback, $parameter)  


注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

$callback:待注册的中止回调[必须]

$parameter:可以通过传入额外的参数来将参数传给中止函数[可选]


可以多次调用 register_shutdown_function() ,这些被注册的回调会按照他们注册时的顺序被依次调用。 如果你在注册的方法内部调用 exit(), 那么所有处理会被中止,并且其他注册的中止回调也不会再被调用。


PHP中止的情况有三种:

1.程序执行完成;

2.exit/die导致的中止;

3.发生致命错误中止;


例1(程序执行完成):

register_shutdown_function('test');  
function test()  
{  
    echo '这个是中止方法test的输出';  
}  
  

  
echo '结束代码<br>';

运行结果:

结束代码
这个是中止方法test的输出

例2(exit导致的中止):

register_shutdown_function('test');  
function test()  
{  
    echo '这个是中止方法test的输出';  
}  
  
exit();
  
echo '结束代码<br>';

运行结果:

这个是中止方法test的输出

例3(发生致命错误中止):

register_shutdown_function('test');  
function test()  
{  
    echo '这个是中止方法test的输出';  
}  
  
// 这里会发生致命错误  
$a = new a();  
  
echo '结束代码<br>';

运行结果:

Fatal error:  Class 'a' not found in E:\phpStudy\PHPTutorial\WWW\a.php on line 47
这个是中止方法test的输出

例4(在类中的使用):

class test {  
    public function __construct() {  
        register_shutdown_function(array($this, 'a'), 'hello');  
    }  
  
    public function a($str) {  
        echo "class test->a():" . $str;  
    }  
}  

$t = new test;

  
echo '结束代码<br>';

运行结果:

结束代码
class test->a():hello


注意,以下两种情况不会执行回调函数:

1.程序有语法错误;

2.register_shutdown_function函数前,发生了致命错误;


学以致用:

可以使用该函数可以用来捕获致命错误并且在发生致命错误后恢复流程处理!

例如要做一个消费队列,因为某条有问题的数据导致致命错误,如果这条数据不处理掉,那么整个队列都会导致瘫痪的状态,这样可以用以下方法来解决。即:如果捕获到有问题的数据导致错误,则在回调函数中将这条数据处理掉就可以了。

TAG: 无标签

文章评论 (0)

    • 这篇文章还没有收到评论,赶紧来抢沙发吧~


Top