php设定错误和异常处理可使用的函数
1、register_shutdown_function
使用场景:当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,这个函数会被调用。
函数介绍:
void register_shutdown_function(callback $callback[.mixed $parameter]);
Registers a callback to be executed after script execution finishes or exit() is called.
下面我们看一个例子:
- <?php
- //只有一行代码的脚本
- require_once '123';
*报错如下*
- Warning: require_once(123): failed to open stream: No such file or directory in......index.php on line 33
- Fatal error: require_once(): Failed opening required '123' (include_path='.;C:\php\pear') in ......index.php on line 33
我们使用这个函数后的代码如下:
- <?php
- /**
- * 在脚本开始处设置一个标识$flag为false。
- * 当程序执行到末尾,令其为true。
- * 如果在执行过程中发生了错误而调用register_shutdown_function函数
- * 那么这个标识位仍然为false。以此来判断是否发生错误。
- * */
- $flag = false;
- // 此函数用于判断是否发生错误
- function callError(){
- global $flag;
- if($flag==true){
- echo "正常!";
- }else{
- die("我错了,呜呜呜");
- }
- return false;
- }
- register_shutdown_function(callError());
- //制造致命错误
- require_once '123';
- $flag = true;
- *执行结果*
- 我错了,呜呜呜
推荐阅读>>
PHP register_shutdown_function函数的深入解析
PHP register_shutdown_function函数详解
2、set_error_handler()
使用场景:该函数用于创建运行期间的用户自己的错误处理方法。
可以用来屏蔽错误信息,防止将一些信息暴露给用户;可以记录错误信息,即使发现生产环境出现的问题;可以做相应的处理,出错时可以显示跳转到预先定义好的出错页面,提供更好的用户体验;可以作为调试工具。
使用方法:
set_error_handler(error_function,error_types);
error_function:必须,规定发生错误时运行的函数
error_types:可选,规定在哪个错误报告级别会显示用户定义的错误,默认是"E_ALL".
提示:如果使用了该函数,会完全绕过标准的PHP错误处理函数,如果必要,用户定义的错误处理程序必须终止(die())脚本。
注释:如果在脚本执行前发生错误,由于那时自定义程序还没注册,将不会用到这个自定义错误处理程序。
下面上一个简单的代码:
- <?php
- /**
- * 下面为自定义的错误处理函数
- * 注意注意再注意:这个函数一定要有四个输入变量$errno,$errstr,$errfile,$errline
- * */
- function my_error_handler($errno,$errstr,$errfile,$errline)
- {
- //在这里,就不做具体的错误处理了,咱们看一下传入的参数都是什么吧
- var_dump($errno);
- var_dump($errstr);
- var_dump($errfile);
- var_dump($errline);
- die("出错了,结束吧!");
- }
- set_error_handler("my_error_handler");
- require '123';
- *结果*
- int 2
- string 'require(123): failed to open stream: No such file or directory' (length=62)
- string '......1.php' (length=31)
- int 16
- 出错了,结束吧!
具体实现,强烈推荐阅读下面这篇文章,总结的很详细>>PHP set_error_handler()函数的使用
3、set_exception_handler()
使用场景:该函数用于创建运行时期间的用户自己的异常处理方法
函数定义:string set_exception_handler ( callback $exception_handler )
参数:必须,规定未捕获的异常发生时调用的函数
说明:该函数必须在调用set_exception_handler()函数之前定义。这个异常处理函数需要一个参数,即抛出的exception对象
提示和注释:在这个异常处理程序被调用后,脚本会停止执行。
下面甩出代码:
- <?php
- function exception_handler($exception) {
- echo "Uncaught exception: " , $exception->getMessage(), "\n";
- }
- set_exception_handler('exception_handler');
- throw new Exception('Uncaught Exception');
- echo "Not Executed\n";
推荐阅读>>http://php.net/manual/en/function.set-exception-handler.php
php设定错误和异常处理可使用的函数的更多相关文章
- PHP设定错误和异常处理三函数
register_shutdown_function(array('Debug','fatalError')); //定义PHP程序执行完成后执行的函数 set_error_handler(array ...
- thinkphp3.2源码(错误和异常处理)
写在前面:tp3.2中每次载入入口文件时都会进行错误和异常的捕获,解读这一部分代码可以对以后的优化很有好处. 处理概览: 错误捕获与处理: 致命错误捕获: 我们尝试在 Home/ ...
- PHP10 错误和异常处理
学习要点 修改错误报告级别 写错误日志 异常处理实现 自定义异常 捕获多路异常 错误处理 定义 错误:开发过程中的失误.用户操作引起的错误. 错误产生原因 语法错误:开发环境提示,未修正则脚本无法 ...
- PHP错误以及异常处理
以前一直觉得php的异常处理没有什么,现在才发现这个还真是门学问,于是狠下心来好好研究了一下,写一篇文章,也作备忘吧. 1. php错误 无论是什么语言编程,都会有如下三种错误,当然php也不例外. ...
- Yii中的错误及异常处理
Yii中的错误及异常处理 Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler, set_error_handler实现的. ...
- 再谈PHP错误与异常处理
博客好久没有更新了,实在惭愧,最近在忙人生大事,哈哈!这段时间没有看什么新的东西,结合项目中遇到的PHP异常处理问题,我又重新梳理了之前模糊的概念,希望对大家理解PHP异常处理有所帮助. 请一定要注意 ...
- Golang错误和异常处理的正确姿势
Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...
- 【PHP】解析PHP中的错误和异常处理
目录结构: contents structure [-] 错误级别 自定义处理器 设置异常日志 自定义异常类 在这篇文章中,笔者将会阐述PHP中的异常处理,希望能够对你有所帮助. 1.错误级别 PHP ...
- ThinkPHP5.0源码学习之注册错误和异常处理机制
在base.php文件中,用一句代码\think\Error::register();实现错误和异常处理机制的注册. // 注册错误和异常处理机制 \think\Error::register(); ...
随机推荐
- R语言学习笔记(十三):零碎知识点(36-40)
36--diag() 如果它的参数是一个矩阵,它返回的是一个向量 如果它的参数是一个向量,它返回的是一个向量 如果它的参数是一个标量,它返回的是指定大小的单位矩阵 > diag(2) [,1] ...
- 42-EF Core Migration
1-常用命令 1-由于2.1版本有点不一样,不会自动创建ApplicationUser类,发现合并没效果.暂时略 增加一个字段 E:\coding\netcore\IdentitySample> ...
- LEAVE TO LIST-PROCESSING
LEAVE SCREEN 現在の画面の処理を中止し.次の画面を呼び出す - LEAVE TO SCREEN 現在の画面の処理を中止し.動的に定義された次の画面を呼び出す - LEAVE [PROGRA ...
- 谷歌面试官经典作品(CTCI)目录
1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除字符串中重复字符 1.8 利用已知函数判断字符串是否为另一字符串的子串 2.1 从链表中移除重复结点 2.2 实现一个算法从一个 ...
- easyui combox 随便不存在的值,清空
onHidePanel: function () { var valueField = $(this).combobox("options").valueField; var va ...
- vs13发布web程序 iis上
一.配置iis 1,找到控制面板--程序--启用或关闭Windows功能 2,从列表中选择Internet Infomation Services,并且把相应的功能条目勾选上,如果不清楚,可以全部选中 ...
- TFS权限配置
装了TFS,要给TFS里添加用户,然后分配权限.其实一般项目中权限都不会控制的那么细,所以就直接想给项目组的每个人建一个用户,让他们都能访问这个项目的代码并进行任何操作.只想怎么简单怎 ...
- n个台阶,每次都可以走一步,走两步,走三步,走到顶部一共有多少种可能
分析 第一个台阶 1第二个台阶 11 2 //走两次1步或者走1次两步第三个台阶 111 12 21 3 第四个台阶 1111 112 121 211 22 13 31 思想:4阶台阶, ...
- adb 命令模拟按键事件
转自:http://blog.csdn.net/jlminghui/article/details/39268419 例子:adb shell input keyevent 4 #这条命令相当于按了设 ...
- Web框架本质及浅谈HTTP协议
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...