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 ...
随机推荐
- python_如何定义装饰器类?
案例: 实现一个能将函数调用信息记录到日志的装饰器 需求: 把每次函数的调用时间,执行时间,调用次数写入日志 可以对被装饰函数分组,调用信息记录到不同日志 动态修改参数,比如日志格式 动态打开关闭日志 ...
- PMS 启动流程
1.在SystemServer中启动PackageManagerService.main 2.newPackageManagerService()并添加到ServiceManager中 3.newin ...
- JDBC (一)
1 JDBC 简介 sun公司为了简化.统一对数据库的操作,定义了一套java操作数据库的规范,称之为JDBC. 数据库厂商的驱动就是对JDBC的实现. 没有JDBC之前 vs 有JDBC之后 JD ...
- JMeter打开jmx文件报错解决方法
错误提示: Error Problem loading XMLfrom:'D:\software\apace-jmeter-3.3\bin\线程组jmx', missing class com.tho ...
- mysql 出现Duplicate entry ‘xxx’ for key ‘PRIMARY’,一个自增字段达到了上限,
mysql 出现Duplicate entry 'xxx' for key 'PRIMARY',一个自增字段达到了上限,
- 通过traceroute追踪并打印成图片
#!/usr/bin/evn python #-*-coding:utf-8 -*- import time import logging,warnings import subprocess imp ...
- AppScan 工作原理
Rational AppScan(简称 AppScan)其实是一个产品家族,包括众多的应用安全扫描产品,从开发阶段的源代码扫描的 AppScan source edition,到针对 Web 应用进行 ...
- 使用clipboard.js实现复制内容至剪贴板
下载插件 clipboard.js是不依赖flash,实现复制内容至剪贴板的js插件.下载clipboard.js的压缩包,根据需要选择dist目录下的压缩或未压缩版. github地址:https: ...
- SSD trim及4k对齐
trim可以帮助减小SSD的写放大WA问题,删除文件后不仅仅是将文件标记为删除,而是在SSD空闲的时候统一进行删除. Linux下的trim支持叫discard,修改fstab文件,在挂载参数中加上d ...
- java设计模式在公众号的应用——我是一个快乐的单例
终于可以休息了,寻一把躺椅,安置于庭院,携一壶好茶,品一番风轻云淡... 自由自在的呼吸,伸手即可触摸阳光的温度,此时此刻,我就是我,像一个单例. 想起『设计模式』,就像想起了很久很久以前的故事,今日 ...