首页 > 开发 > PHP > 正文

PHP中register_shutdown_function函数的基础介绍与用法详解

2024-05-04 22:44:33
字体:
来源:转载
供稿:网友

前言

最近在看《PHP核心技术与最佳实践》,里面有使用到一个函数,register_shutdown_function,由于之前没有用过该函数,就去查了一下资料,就觉得是个很实用的函数,所以这里写一下这个函数的用法。下面话不多说了,来一起看看详细的介绍吧。

1. 函数说明

定义:该函数是来注册一个会在PHP中止时执行的函数

参数说明:

void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] ) 

注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

callback:待注册的中止回调

parameter:可以通过传入额外的参数来将参数传给中止函数

2. PHP中止的情况

PHP中止的情况有三种:

执行完成 exit/die导致的中止 发生致命错误中止

a. 第一种情况,执行完成

<?php function test() {  echo '这个是中止方法test的输出'; }  register_shutdown_function('test');  echo 'before' . PHP_EOL; 

运行:

before 这个是中止方法test的输出 

注意:输出的顺序,等执行完成了之后才会去执行register_shutdown_function的中止方法test

b. 第二种情况,exit/die导致的中止

<?php function test() {  echo '这个是中止方法test的输出'; }  register_shutdown_function('test');  echo 'before' . PHP_EOL; exit(); echo 'after' . PHP_EOL; 

运行:

before 这个是中止方法test的输出 

后面的after并没有输出,即exit或者是die方法导致提前中止。

c. 第三种情况,发送致命错误中止

<?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的输出 

后面的after也是没有输出,致命错误导致提前中止了。

3. 参数

第一个参数支持以数组的形式来调用类中的方法,第二个以及后面的参数都是可以当做额外的参数传给中止方法。

<?php  class Shutdown {  public function stop()  {   echo "这个是stop方法的输出";  } }  // 当PHP终止的时候(执行完成或者是遇到致命错误中止的时候)会调用new Shutdown的stop方法 register_shutdown_function([new Shutdown(), 'stop']);  // 将因为致命错误而中止 $a = new a();  // 这一句并没有执行,也没有输出 echo '必须终止';             
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表