void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )
<?php
function test()
{
echo '这个是中止方法test的输出';
}
register_shutdown_function('test');
echo 'before' . PHP_EOL;
before 这个是中止方法test的输出
<?php
function test()
{
echo '这个是中止方法test的输出';
}
register_shutdown_function('test');
echo 'before' . PHP_EOL;
exit();
echo 'after' . PHP_EOL;
before 这个是中止方法test的输出
<?php
function test()
{
echo '这个是中止方法test的输出';
}
register_shutdown_function('test');
echo 'before' . PHP_EOL;
// 这里会发生致命错误
$a = new a();
echo 'after' . PHP_EOL;
before
Fatal error: Uncaught Error: Class 'a' not found in D:\laragon\www\php_book\test.php on line 12
Error: Class 'a' not found in D:\laragon\www\php_book\test.php on line 12
Call Stack:
0.0020 360760 1. {main}() D:\laragon\www\php_book\test.php:0
这个是中止方法test的输出
<?php
class Shutdown
{
public function stop()
{
echo "这个是stop方法的输出";
}
}
// 当PHP终止的时候(执行完成或者是遇到致命错误中止的时候)会调用new Shutdown的stop方法
register_shutdown_function([new Shutdown(), 'stop']);
// 将因为致命错误而中止
$a = new a();
// 这一句并没有执行,也没有输出
echo '必须终止';
<?php
class TestDemo {
public function __construct()
{
register_shutdown_function([$this, "f"], "hello");
}
public function f($str)
{
echo "class TestDemo->f():" . $str;
}
}
$demo = new TestDemo();
echo 'before' . PHP_EOL;
/**
运行:
before
class TestDemo->f():hello
*/
<?php
/**
* 可以多次调用 register_shutdown_function,这些被注册的回调会按照他们注册时的顺序被依次调用。
* 注意:如果你在f方法(第一个注册的方法)里面调用exit方法或者是die方法的话,那么其他注册的中止回调也不会被调用
*/
/**
* @param $str
*/
function f($str) {
echo $str . PHP_EOL;
// 如果下面调用exit方法或者是die方法的话,其他注册的中止回调不会被调用
// exit();
}
// 注册第一个中止回调f方法
register_shutdown_function("f", "hello");
class TestDemo {
public function __construct()
{
register_shutdown_function([$this, "f"], "hello");
}
public function f($str)
{
echo "class TestDemo->f():" . $str;
}
}
$demo = new TestDemo();
echo 'before' . PHP_EOL;
/**
运行:
before
hello
class TestDemo->f():hello
注意:如果f方法里面调用了exit或者是die的话,那么最后的class TestDemo->f():hello不会输出
*/
<?php
/**
* register_shutdown_function,注册一个会在php中止时执行的函数,中止的情况包括发生致命错误、die之后、exit之后、执行完成之后都会调用register_shutdown_function里面的函数
* Created by PhpStorm.
* User: Administrator
* Date: 2017/7/15
* Time: 17:41
*/
class Shutdown
{
public function stop()
{
echo 'Begin.' . PHP_EOL;
// 如果有发生错误(所有的错误,包括致命和非致命)的话,获取最后发生的错误
if (error_get_last()) {
print_r(error_get_last());
}
// ToDo:发生致命错误后恢复流程处理
// 中止后面的所有处理
die('Stop.');
}
}
// 当PHP终止的时候(执行完成或者是遇到致命错误中止的时候)会调用new Shutdown的stop方法
register_shutdown_function([new Shutdown(), 'stop']);
// 将因为致命错误而中止
$a = new a();
// 这一句并没有执行,也没有输出
echo '必须终止';
Fatal error: Uncaught Error: Class 'a' not found in D:\laragon\www\php_book\1_23_register_shutdown.php on line 31
Error: Class 'a' not found in D:\laragon\www\php_book\1_23_register_shutdown.php on line 31
Call Stack:
0.0060 362712 1. {main}() D:\laragon\www\php_book\1_23_register_shutdown.php:0
Begin.
Array
(
[type] => 1
[message] => Uncaught Error: Class 'a' not found in D:\laragon\www\php_book\1_23_register_shutdown.php:31
Stack trace:
#0 {main}
thrown
[file] => D:\laragon\www\php_book\1_23_register_shutdown.php
[line] => 31
)
Stop.
<?php
try {
// 将因为致命错误而中止
$a = new a();
// 这一句并没有执行,也没有输出
echo 'end';
} catch (Throwable $e) {
print_r($e);
echo $e->getMessage();
}
Error Object
(
[message:protected] => Class 'a' not found
[string:Error:private] =>
[code:protected] => 0
[file:protected] => C:\laragon\www\php_book\throwable.php
[line:protected] => 5
[trace:Error:private] => Array
(
)
[previous:Error:private] =>
[xdebug_message] =>
Error: Class 'a' not found in C:\laragon\www\php_book\throwable.php on line 5
Call Stack:
0.0000 349856 1. {main}() C:\laragon\www\php_book\throwable.php:0
)
Class 'a' not found
<?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: 程序执行出错。\r\n", FILE_APPEND);
/******** 以下可以做一些处理 ********/
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2026 源码网商城 (www.ymwmall.com) 版权所有