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. 网口up不起来问题排查

    最近处理一个问题,发现有的网口up不起来.       ethtool eth6   Settings for eth6:   Supported ports: [ FIBRE ]   Support ...

  2. start tomcat with debugging mode

    For this, you must run your application in debug mode, which requires below parameters. -Xdebug -Xru ...

  3. 频繁更换ip会影响SEO优化吗?

    网站更换ip会不影响SEO的效果,其实网站更换ip是正常的(但不能频繁更换),搜索引擎抓取是根据网站的域名进行的,不是根据ip来抓取你的网站.在短时间内更换IP对SEO的效果并没有很大的影响. 如果是 ...

  4. Spring怎么引入多个xml配置文件

    方式一:在web.xml中通过<context-param> 标签引入 <context-param> <param-name>contextConfigLocat ...

  5. 针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行

    <?php//针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行,http://ken.01h.net/define('PHP_LOCK_FILE', dirname(__FILE__ ...

  6. Notepad++运行Java

    插件NppExec使用 首先要让Notepad++编译和运行Java,前提是电脑里已经配置好了Java的环境 1,安装插件NppExec:解压出来提取NppExec.dll文件放在Notepad++安 ...

  7. 华为交换机boot默认密码

    交换机系统启动bootrom时,在2秒内按下"CTRL+B",此处需要输入密码才能进入BOOTROM菜单.默认密码如下: 1. S9300 V100R006及其之前的版本:9300 ...

  8. [C#] C# 与 MongoDB 的 CURD

    C# 与 MongoDB 的 CURD static void Main(string[] args) { //建立连接 var client = new MongoClient(); //建立数据库 ...

  9. WPF中获取系统本身自带的控件模板(XAML)

    每个控件都有自己默认的模板,这是MS本身就编写好的,如果我们能够得到这些模板的XAML代码,那么它将是学习模板的最好的示例,要想获得某个控件ctrl的默认模板,请调用以下方法: string GetT ...

  10. 浅谈WPF依赖项属性

    浅谈WPF依赖项属性 0. 引言 依赖项属性虽然在使用上和CLR属性一样,但是它是WPF特有的,不同于CLR属性.只是封装为我们常用CLR的属性,在语法使用上和CLR属性一样.WPF中一些功能:动画, ...