PHP函数register_shutdown_function的用法
register_shutdown_function这个函数是在PHP程序运行结束之前调用的,用这个函数可以做很多,比如调用运行发生致命错误中止的原因,或者调试程序的执行时间等。
PHP终止的情况有哪些呢?
一、执行完成(等执行完成了之后才会去执行register_shutdown_function的中止方法testFun)
<?php
function testFun() { echo '程序运行完成执行testFun方法'; } register_shutdown_function('testFun'); echo '测试一下----' . '<br>';
测试一下---- //结果 程序运行完成执行testFun方法 //在执行完最后一行代码,调用函数
二、exit/die导致的中止(后面的=====测试一下-----没有输出,即exit或者是die方法导致提前中止)
<?php
function testFun() { echo '程序终止执行testFun方法'; } register_shutdown_function('testFun'); echo '-----测试一下----' . '<br>'; exit(); echo '=====测试一下----' . '<br>';
-----测试一下---- 程序终止执行testFun方法 //终止的时候执行
三、发生致命错误中止
<?php function testFun() { echo '程序发生致命错误执行testFun方法'; } register_shutdown_function('testFun'); echo '-----测试一下----' . '<br>'; undefinedFunc (); //调用未定义函数 echo '=====测试一下----' . '<br>';
-----测试一下---- Fatal error: Call to undefined function undefinedFunc() in D:\phpStudy\WWW\miaosha\web\index.php on line 12 程序发生致命错误执行testFun方法
稍微复杂一点,数组形式传参
调用指定类中的方法
<?php class TestClass { function testFun() { echo '终止调用类中的方法'; } } register_shutdown_function([new TestClass(), 'testFun']); echo '测试一下' . '<br>';
测试一下
终止调用类中的方法
实例化参数传递,类方法中调用
<?php class TestClass { public $str = ''; public function __construct ($str = '') { $this->str = $str; register_shutdown_function([$this, 'testFun'], 'StrParam'); } function testFun($StrParam = '') { echo $this->str . '<br>'; echo '终止调用类中的方法' . '<br>'; echo $StrParam . '<br>'; } } $demo = new TestClass('this->str'); echo '程序结束了' . '<br>';
程序结束了 this->str 终止调用类中的方法 StrParam
多个注册方法使用
<?php function testFun1 ($strParam1 = '') { echo '第一个测试方法' . $strParam1; echo '<br>'; } register_shutdown_function('testFun1', 'strParam1'); class TestClass { public function __construct () { register_shutdown_function([$this, 'testFun'], 'StrParam'); } function testFun($StrParam = '') { undefinedFunc(); //调用未定义函数 echo '第二个测试方法' . '<br>'; echo $StrParam . '<br>'; } } $demo = new TestClass(); echo '程序结束了' . '<br>';
程序结束了 第一个测试方法strParam1 Fatal error: Call to undefined function undefinedFunc() in D:\phpStudy\WWW\miaosha\web\index.php on line 21
以下情况自己测试下
<?php function testFun1 ($strParam1 = '') { echo '第一个测试方法' . $strParam1; echo '<br>'; // exit(); //自己测试下 } register_shutdown_function('testFun1', 'strParam1'); class TestClass { public function __construct () { register_shutdown_function([$this, 'testFun'], 'StrParam'); } function testFun($StrParam = '') { // undefinedFunc(); //调用未定义函数 echo '第二个测试方法' . '<br>'; echo $StrParam . '<br>'; // exit(); //自己测试下 } } $demo = new TestClass(); echo '程序结束了' . '<br>';