详解php7中异常与错误的处理
首先声明,笔者 php版本 7.2
- 异常与错误的概述
- 什么叫做异常?
- 什么叫做错误?
- 异常处理
- 错误的级别
- 自定义错误处理程序
- set_error_handler()
- set_exception_handler()
- register_shutdown_function()
- 框架的错误处理
- 异常与错误的概述
推荐(免费):PHP7
异常与错误的概述
什么叫做异常?
异常是指程序运行中不符合预期情况以及与正常流程不同的状况。
比如你链接数据库,在参数都写上去的条件下,发现链接不上去,这就属于不符合预期
可以被 try-catch 捕捉得到
什么叫做错误?
是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。
平时遇到的 warming、notice都是错误,只是级别不同而已。
例如:
- TypeError(类型错误) 我规定的函数参数类型和传入的参数不一致
- ArithmeticError (算数错误)
- ParseError (解析错误)在调入的文件中,include “demo.php”,或者 eval();中有语法错误造成解析失败
- AssertionError(断言错误)当assert生效时产生该错误
- pisionByZeroError (分母为零) 运算过程中例如除法,分母为0
除了这几种情况,其余全部为异常
异常处理
在以前的 php5.X 中 并且不能被 try-catch 捕捉得到,到了 php 7.x 中,定义了一个 Throwable 接口 并使得大部分的 Error 和
Exception 实现了该接口,我们得以在 try-catch 中抛出该错误
所以说以后想要捕获异常,而你又不知道此异常是 Error 还是 Exception 的话,可以向这样抛出
try{ …… }catch(Throwable $e){ …… }
错误的级别
在 php 中的错误也是有级别的
Parse error
>Fatal Error
> Waning
> Notice
>Deprecated
Deprecated 最低级别的错误(不推荐,不建议) 使用一些过期函数的时候会出现,程序继续执行 Notice 通知级别的错误 使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行 E_NOTICE // 运行时通知。表示脚本遇到可能会表现为错误的情况. E_USER_NOTICE // 用户产生的通知信息。Waning 警告级别的错误 程序出问题了,需要修改代码!!!程序继续执行 E_WARNING // 运行时警告 (非致命错误)。 E_CORE_WARNING // PHP初始化启动过程中发生的警告 (非致命错误) 。 E_COMPILE_WARNING // 编译警告 E_USER_WARNING // 用户产生的警告信息Fatal Error 错误级别的错误 程序直接报错,需要修改代码!!!中断程序执行,可使用register_shutdown_function()函数在程序终止前触发一个函数 E_ERROR // 致命的运行错误,错误无法恢复,暂停执行脚本 E_CORE_ERROR // PHP启动时初始化过程中的致命错误 E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR E_USER_ERROR // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)Parse error 语法解析错误 语法检查阶段报错,需要修改代码!!!中断程序执行,除了修改ini文件,将错误信息写到日志中,什么也做不了 E_PARSE //编译时的语法解析错误
自定义错误处理程序
有的时候,php 中自带的错误处理程序,并不能完全满足我们得需要,大部分时候,我们都需要手动重写异常处理。
php 给我们提供了三个函数来帮助我们来处理,分别是
set_error_handler()
- 函数来托管错误处理程序,可自行定制错误的处理流程。
- 如果此函数之前的代码发生错误,那么不会调用我们自定义的处理函数,因为还未注册
- 设置此函数后 error_reporting() 将会失效
- 以下级别的错误不能由用户定义的函数来处理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING 该函数只能捕捉我们的 部分 Warning 和 Note 级别的错误
set_exception_handler()
- 用于没有被捕获的异常处理
register_shutdown_function()
- 作用:注册一个会在php中止时执行的函数
- 捕获PHP的错误:Fatal Error、Parse Error等,这个方法是PHP脚本执行结束前最后一个调用的函数,比如脚本错误、die()、exit、异常、正常结束都会调用,
- 如果拿来用错误处理的时候,需要配合
error_get_last()
它能获取最后发生的错误。
举例 register_shutdown_function('shutdown');function shutdown(){ if ($error = error_get_last()) { var_dump($error); } }$name //没写 ; 号
执行结果 Parse error: syntax error, unexpected ';' in /app/swoole/errorDemo.php on line 34
Emmmmm 这不扯淡吗? 分明分明没有执行呢?
其实原因使因为,程序执行前,我们 php 会先检查我们程序的语法问题,如果没有问题,我们才能执行我们的程序。
我们上面的代码没用通过我们的语法检查,所以直接报错。
那么问题来了? 我们在框架中的时候,为什么是框架都是框架给我们报错呢?
框架的错误处理
在框架中,其代码是通过一个入口文件来加载的。而我们php检测语法错误的时候,只检查我们的 index.php 有它 require 是不会受到检测的。当我们代码出错时,那是在 run-time 中检测的错误,所以我们框架中的可以相应错误
以上是详解php7中异常与错误的处理的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文详细介绍了有效的PHP 7会话管理,涵盖了session_start(),$ _Session,session_destroy()和安全cookie处理等核心功能。 它强调了安全性最佳实践,包括HTTP,会话ID再生,S

本文解释了如何使用新遗物监视PHP 7应用程序性能。 它详细详细介绍了新的Relic的设置,关键绩效指标(KPI),例如APDEX分数和响应时间,通过交易轨迹的瓶颈标识和错误轨迹

本文详细介绍了将PHP 5.6升级为PHP 7,强调了备份,检查服务器兼容性以及选择升级方法(软件包管理器,编译,控制面板或Web服务器配置)等关键步骤。 它解决了Potentia

本文使用SPL_AUTOLOAD_REGISTER()解释了PHP 7的自动加载,以按需加载类。 它详细介绍了最佳实践,例如基于命名空间的自动加载和用于性能优化的缓存,解决了常见问题(例如,找不到类别

本文指导PHP 7开发人员使用GIT进行版本控制。 它涵盖了初始化,分期,投入,忽略文件,远程存储库,分支,合并,解决冲突和基本的GIT命令。 效率的最佳实践

本文详细介绍了部署PHP 7应用程序,涵盖方法(FTP,SSH,部署工具),服务器配置(Apache/nginx,php-fpm),数据库设置和重要的安全考虑因素。 它突出了服务器compatib等常见挑战

本文说明了如何使用Xdebug进行调试PHP 7代码。 它涵盖Xdebug配置(安装,php.ini设置,IDE设置),断点用法(条件,功能,远程)和故障排除连接问题。 有效的Debuggi

本文在PHP 7中解释了面向对象的编程(OOP),强调了其优势:模块化,可重复性,可维护性和改进的代码组织。 它详细说明了类,对象,继承和多态性,以说明其使用
