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:\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的用法的更多相关文章
- PHP错误处理函数set_error_handler()的用法
定义和用法 set_error_handler() 函数设置用户自定义的错误处理函数. 该函数用于创建运行时期间的用户自己的错误处理方法. 该函数会返回旧的错误处理程序,若失败,则返回 null. 语 ...
- PHP异常处理函数set_exception_handler()的用法
定义和用法 set_exception_handler() 函数设置用户自定义的异常处理函数. 该函数用于创建运行时期间的用户自己的异常处理方法. 该函数会返回旧的异常处理程序,若失败,则返回 nul ...
- C语言函数sscanf()的用法
从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( st ...
- c语言学习之基础知识点介绍(八):函数的基本用法
本节开始说函数. 一.函数的基本用法 /* 作用:可以实现代码的复用,在一定程度上解决代码冗余的问题:方便后期维护. 语法: void 函数名(){ 函数体; } 函数命名要有意义,遵守驼峰命名法. ...
- ROW_NUMBER() OVER函数的基本用法用法
ROW_NUMBER() OVER函数的基本用法用法 转自:http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html 语法 ...
- C++虚函数的新用法
1.今天在segmentfault上看到了一个C++虚函数的新用法,先上代码 #include <iostream> using namespace std; class B { publ ...
- JAVA中字符串函数subString的用法小结
本篇文章主要是对JAVA中字符串函数subString的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String str; str=str.substring(int begi ...
- Python正则替换字符串函数re.sub用法示例(1)
本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...
- Kotlin入门(9)函数的基本用法
上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法. 前面几篇文章介绍控制语句之时,在setOnCli ...
随机推荐
- 解决myeclipse10.1导出War包出错:Security Alert:Integrity check error
解决myeclipse10.1导出War包出错:Security Alert:Integrity check error 解决myeclipse10.1不能导出war包报 ============== ...
- mybatis配置多个数据源事务(Transaction)处理
当mybatis配置文件中只有一个数据源的时候,按照正常的事务注解形式@Transaction是没有问题的,但是当配置文件中有多个数据源的时候发现事务不起作用了,怎么解决这个问题呢?看下面的案例:
- np.array转换为list,嵌套的python list转成一个一维的python list
np.array转换为list 1 meitan = shuju.iloc[start:end, 1:2] zhengqi = shuju.iloc[start:end,2:3] print(type ...
- Maven的Archetype简介
Archetype,骨架的意思. 文章出处:http://m.blog.csdn.net/blog/FireOfStar/42526027 Archetype是什么? 简单的说,Archetype是M ...
- Web Magic 简介
WebMagic in Action Little book of WebMagic. WebMagic是我业余开发的一款简单灵活的爬虫框架.基于它你可以很容易的编写一个爬虫. 这本小书以WebMag ...
- Android开发模板代码(一)——简单打开图库选择照片
首先,先贴上样本代码 //检查权限 public void checkPermission() { if (ContextCompat.checkSelfPermission(this, Manife ...
- Struts2 (三)
1 Struts2的拦截器 Struts2拦截器在访问某个Action方法之前或之后实施拦截,拦截器是可插拔的,拦截器是AOP的一种实现. Struts2拦截器栈:将拦截器按一定顺序联结成一条链,在访 ...
- 我的运维之旅-查找文本的linux命令
小伙伴们肯定都遇到这么尴尬场景,线上服务出问题了,老大一直在问什么问题导致的,而你由于对查找文本的命令不太熟,鼓捣了半天才找到那条 异常日志,而这时可能半个小时都已经过去了.老大可能对你失望透顶了.讲 ...
- AM调制的FPGA实现
一.说明: 功能:AM调制 平台:Vivado 2016.4 和 Matlab R2017a 二.原理: 1. AM调制原理 AM已调信号的时域表达式: 已调信号的频域表达式: 本质上AM调制就是频谱 ...
- 9 C. Hexadecimal's Numbers
题目链接 http://codeforces.com/contest/9/problem/C 题目大意 输入n,计算出n之内只有0和1组成的数字的数量 分析 k从1开始,只要小于n,就给sum++,并 ...