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:phpStudyWWWmiaoshawebindex.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:phpStudyWWWmiaoshawebindex.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>';  
原文地址:https://www.cnblogs.com/wt645631686/p/8257148.html