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>';  

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17141.html

(0)
上一篇 2021年7月19日 19:55
下一篇 2021年7月19日 19:55

相关推荐

发表回复

登录后才能评论