• 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>';  
  • 相关阅读:
    基于spark实现表的join操作
    关于IO的一些数字
    scala的REPL shell的调用
    搭建eclipse+maven+scala-ide的scala web开发环境
    Apache Mesos总体架构
    spark下测试akka的分布式通讯功能
    akka创建actor时报错:IllegalArgumentException: no matching constructor found on class $iwC$$iwC$$iwC$$iwC$
    akka构建简单分布式应用
    Memcached 工作原理
    分析Redis架构设计
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8257148.html
Copyright © 2020-2023  润新知