zoukankan      html  css  js  c++  java
  • 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>';  
  • 相关阅读:
    阿里DatatX mysql8往 Elasticsearch 7 插入时间数据 时区引发的问题
    通俗易懂 k8s (3):kubernetes 服务的注册与发现
    ReplicaSet 和 ReplicationController 的区别
    使用Go module导入本地包
    k8s之statefulset控制器
    终于成功部署 Kubernetes HPA 基于 QPS 进行自动伸缩
    Atitit drmmr outline org stat vb u33.docx Atitit drmmr outline org stat v0 taf.docx Atitit drmmr out
    Atitit all diary index va u33 #alldiary.docx Atitit alldiaryindex v1 t717 目录 1. Fix 1 2. Diary deta
    Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map >> spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
    Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL) 1 1.1. 8.2 功能概述 1 1.2. Ongl
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8257148.html
Copyright © 2011-2022 走看看