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 ...
随机推荐
- shopnc IM配置过程
im配置windows下,修改chat下和data下的config,安装node,覆盖node下文件即可
- java8-新特性--(接口的默认方法与静态方法)
Java 8用默认方法与静态方法这两个新概念来扩展接口的声明. public interface Inte{ void method(); default void defaultMethod(){ ...
- 玩转 Redis缓存 集群高可用
转自:https://segmentfault.com/a/1190000008432854 Redis作为主流nosql,在高并发使用场景中都会涉及到集群和高可用的问题,有几种持久化?场景下的缓存策 ...
- (2-2)SpringCloud-服务注册到Eureka Server集群并消费
服务注册到Eureka Server集群 在(2-1)SpringCloue-Eureka实现高可用注册中心中我们搭建好了高可用的Eureka注册中心,下面我们要把服务注册到Eureka Server ...
- Oracle实战笔记(第七天)之PL/SQL进阶
一.控制结构 控制结构包括:判断语句(条件分支语句).循环语句.顺序控制语句三种. 1.条件分支语句 if--then:简单条件判断 --编写一个过程,可以输入一个雇员名,如果该雇员名的工资低于200 ...
- AI_神经网络监督学习
神经网络的神奇之处在哪? 所有神经网络创造出来的价值,都是由一种机器学习,称之为监督学习, 下面这些例子神经网络效果拔群,通过深度学习获利最多的是在线广告 技术的进步来源于计算机视觉和深度学习 例如: ...
- JVM 自动内存管理:对象判定和回收算法
- ATS日志说明
在ATS日志中我们经常遇到形形色色的缓存结果码,为了更清晰地认识它们,相关资料整理到这里: TCP_HIT 请求对象的一份合法拷贝被缓存,ATS将发送该对象给client TCP_MISS 请求对象未 ...
- 获取sap登陆用户名的中文描述
一.业务场景: 当通过MKPF-USNAM查找ADRP-NAME_LAST时,中间缺少一个表,即USR21.否则,MKPF-USNAM不能和ADRP-PERSNUMBER直接对等. 二.解决方法: D ...
- React原理探索- @providesModule 模块系统
@providesModule是什么 react抛出组件化的概念后,对于开发者而言,为了提高代码的可读性与结构性,通过文件目录结构去阐述组件嵌套关系无疑是一个很好的办法,但是目录级别的加深,同时让re ...