zoukankan      html  css  js  c++  java
  • register_shutdown_function 函数详解

    php开发测试及线上的时候可以根据不同情况设定错误和异常处理需要用到有

    设定错误和异常处理三函数

    register_shutdown_function(array(‘Debug’,'fatalError’)); //定义PHP程序执行完成后执行的函数
    set_error_handler(array(‘Debug’,'appError’)); // 设置一个用户定义的错误处理函数
    set_exception_handler(array(‘Debug’,'appException’)); //自定义异常处理。
    

    下面讲一下register_shutdown_function() 函数.

    功能:register_shutdown_function() 函数可实现当程序执行完成后执行的函数,其功能为可实现程序执行完成的后续操作。程序在运行的时候可能存在执行超时,或强制关闭等情况,但这种情况下默认的提示是非常不友好的,如果使用register_shutdown_function()函数捕获异常,就能提供更加友好的错误展示方式,同时可以实现一些功能的后续操作,如执行完成后的临时数据清理,包括临时文件等。

    可以这样理解调用条件:

    1、当页面被用户强制停止时

    2、当程序代码运行超时时

    3、当PHP代码执行完成时,代码执行存在异常和错误、警告

    实例说明

    1. 一个简介的例子 , 调用一个函数

    <?php
        function test() {
            echo "test()";
        }
        register_shutdown_function(array("test"));
        echo "show: ";
     ?>
    

    这个例子输出  

    show: test()
    

    这个函数的作用就是在退出脚本前,调用已经注册的函数,并执行该函数。

    2. 在类中用一个数组作为一个参数

    <?php
    class ClassDemo {
        public function __construct() {
            register_shutdown_function(array($this, "f"));
        }
    
        public function f() {
            echo "f()";
        }
    }
    
    $demo = new ClassDemo();
    echo "before </br>";
    ?>
    

    输出:

    before
    f()
    

    3. 带有参数的例子:

    <?php
    function f($str) {
            echo $str."<br>";
    }
     
    register_shutdown_function("f","hello");
    
    class ClassDemo {
        public function __construct() {
            register_shutdown_function(array($this, "f"),"hello");
        }
    
        public function f($str) {
            echo "f():".$str;
        }
    }
    
    $demo = new ClassDemo();
    echo "before </br>";   
    ?>
    

    注意事项

    1,register_shutdown_function()函数可重复调用,但执行的顺序与注册的顺序相同
    2,如果在调用register_shutdown_function()函数之前有exit()函数调用,register_shutdown_function()函数将不能执行
    3,PHP4后支持注册函数参数传递
    4,在某些服务端,如Apache,当前目录在register_shutdown_function()函数中能够改变
    5,register_shutdown_function()函数执行在headers发送之后
     
  • 相关阅读:
    Java 基础
    Java 数据类型
    Spring 拦截器实现事物
    SSH 配置日记
    Hibernate 知识提高
    Jsp、Servlet
    leetcode 97. Interleaving String
    leetcode 750. Number Of Corner Rectangles
    leetcode 748. Shortest Completing Word
    leetcode 746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/4642531.html
Copyright © 2011-2022 走看看