加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP中register_shutdown_function函数的基本先容与用法详解

发布时间:2021-03-14 21:03:16 所属栏目:编程 来源:网络整理
导读:媒介 最近在看《PHP焦点技能与最佳实践》,内里有行使到一个函数,register_shutdown_function,因为之前没有效过该函数,就去查了一下资料,就认为是个很适用的函数,以是这里写一下这个函数的用法。下面话不多说了,来一路看看具体的先容吧。 1. 函数声名

Begin.
Array
(
[type] => 1
[message] => Uncaught Error: Class 'a' not found in D:laragonwwwphp_book1_23_register_shutdown.php:31
Stack trace:

0 {main}

thrown
[file] => D:laragonwwwphp_book1_23_register_shutdown.php
[line] => 31
)
Stop.

留意:PHP7中新增了Throwable非常类,这个类可以捕捉致命错误,即可以行使try...catch(Throwable $e)来捕捉致命错误,代码如下:

try {
// 将由于致命错误而中止
$a = new a();

// 这一句并没有执行,也没有输出
echo 'end';
} catch (Throwable $e) {
print_r($e);
echo $e->getMessage();
}

运行:

Class 'a' not found [string:Error:private] => [code:protected] => 0 [file:protected] => C:laragonwwwphp_bookthrowable.php [line:protected] => 5 [trace:Error:private] => Array ( )

[previous:Error:private] =>
[xdebug_message] =>
Error: Class 'a' not found in C:laragonwwwphp_bookthrowable.php on line 5

Call Stack:
0.0000 349856 1. {main}() C:laragonwwwphp_bookthrowable.php:0

)
Class 'a' not found

这样的话,PHP7中行使Throwable来捕捉的话比行使register_shutdown_function这个函数来得更利便,也更保举Throwable。

留意:Error类也是可以捕捉到致命错误,不外Error只能捕捉致命错误,不能捕捉非常Exception,而Throwable是可以捕捉到错误和非常的,以是更保举。

6.巧用register_shutdown_function判定php措施是否执行完

尚有一种应用场景就是:要做一个斲丧行列,由于某条有题目的数据导致致命错误,假如这条数据不处理赏罚掉,那么整个行列城市导致瘫痪的状态,这样可以用以下要领来办理。即:假如捕捉到有题目的数据导致错误,则在回调函数中将这条数据处理赏罚掉就可以了。

php典型参考与理会:

register_shutdown_function('myFun'); //放到最上面,否则假如下面有致命错误,就不会挪用myFun了。
$execDone = false; //措施是否乐成执行完(默以为false)

/
* 营业逻辑区***
*/
$tas = 3;
if($tas == 3)
{
new daixiaorui();
}

/
* 营业逻辑竣事***
*/
$execDone = true; //因为措施由上至下执行,因此当执行到从此,则证明逻辑没有呈现致命的错误。

function myFun()
{
global $execDone;
if($execDone === false)
{
file_put_contents("E:/myMsg.txt",date("Y-m-d H:i:s")."---error: 措施执行堕落。rn",FILE_APPEND);
/**** 以下可以做一些处理赏罚 ****/
}
}

总结

register_shutdown_function这个函数首要是用在处理赏罚致命错误的后续处理赏罚上(PHP7更保举行使Throwable来处理赏罚致命错误),不外弱点也很明明,只能处理赏罚致命错误Fatal error,其他的错误包罗最高错误Parse error也是没步伐处理赏罚的。

好了,以上就是这篇文章的所有内容了,但愿本文的内容对各人的进修可能事变具有必然的参考进修代价,假若有疑问各人可以留言交换,感谢各人对编程之家的支持。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读