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
程序发生致命错误执行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

以下情况自己测试下

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

PHP函数register_shutdown_function的用法的更多相关文章

  1. PHP错误处理函数set_error_handler()的用法

    定义和用法 set_error_handler() 函数设置用户自定义的错误处理函数. 该函数用于创建运行时期间的用户自己的错误处理方法. 该函数会返回旧的错误处理程序,若失败,则返回 null. 语 ...

  2. PHP异常处理函数set_exception_handler()的用法

    定义和用法 set_exception_handler() 函数设置用户自定义的异常处理函数. 该函数用于创建运行时期间的用户自己的异常处理方法. 该函数会返回旧的异常处理程序,若失败,则返回 nul ...

  3. C语言函数sscanf()的用法

    从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( st ...

  4. c语言学习之基础知识点介绍(八):函数的基本用法

    本节开始说函数. 一.函数的基本用法  /* 作用:可以实现代码的复用,在一定程度上解决代码冗余的问题:方便后期维护. 语法: void 函数名(){ 函数体; } 函数命名要有意义,遵守驼峰命名法. ...

  5. ROW_NUMBER() OVER函数的基本用法用法

    ROW_NUMBER() OVER函数的基本用法用法 转自:http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html 语法 ...

  6. C++虚函数的新用法

    1.今天在segmentfault上看到了一个C++虚函数的新用法,先上代码 #include <iostream> using namespace std; class B { publ ...

  7. JAVA中字符串函数subString的用法小结

    本篇文章主要是对JAVA中字符串函数subString的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String str; str=str.substring(int begi ...

  8. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...

  9. Kotlin入门(9)函数的基本用法

    上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法. 前面几篇文章介绍控制语句之时,在setOnCli ...

随机推荐

  1. JS中数组的常用方法

    首先,在开始前我们先了解一下什么是数组. 1.什么是数组? 数组就是一组数据的集合,其表现形式就是内存中的一段连续的内存地址,数组名称其实就是连续内存地址的首地址.说白了它就是将一堆数据按照一定的顺序 ...

  2. 第一个RESTful API

    一个简单的测试 /** * Created by M.C on 2017/9/8. */ var superagent = require('superagent'); var expect = re ...

  3. 模态框zeroModal快速引入

    最基本快速接入 <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...

  4. Myeclipse 10安装与破解

    首先下载Myeclipse 10的压缩包,我这里以10.7版本为例.下载路径分享 链接:https://pan.baidu.com/s/1nxf19S9 密码:rqw4 下载好后解压,解压后进行安装. ...

  5. linux(centos)下安装git并上传代码

    cat /etc/redhat-release   查看系统版本信息 >>CentOS Linux release 7.4.1708 (Core) 背景:我已经注册了github账号,之前 ...

  6. js二维码插件总结

    jquery.qrcode.js生成二维码插件&转成图片格式 http://blog.csdn.net/u011127019/article/details/51226104

  7. linux(ubuntu或Deepin等)+win7双系统升级win10出现grub解决办法

    1,set root=(hd0,msdos11) 2,set prefix=(hd0,msdos11)/boot/grub 3,insmod /boot/grub/i386-pc/normal.mod ...

  8. 让Python支持中文注释

    在第一行中加入如下行即可,表示文件的编码: #coding=utf-8 或 #coding=gbk

  9. fopen()函数参数

    摘自百度百科....     1."r" = "rt" 打开一个文本文件,文件必须存在,只允许读 2."r+" = "rt+&qu ...

  10. 分析AJAX抓取今日头条的街拍美图并把信息存入mongodb中

    今天学习分析ajax 请求,现把学得记录, 把我们在今日头条搜索街拍美图的时候,今日头条会发起ajax请求去请求图片,所以我们在网页源码中不能找到图片的url,但是今日头条网页中有一个json 文件, ...