php判断 PHP 核心特性 - 错误处理
错误,可以理解程序本身的错误,例如语法错误。而异常则更偏向于程序运行不符合预期或者不符合正常流程;对于 PHP 语言而言,处理错误和处理异常使用的机制完全不同,因此很容易
错误与异常 错误,可以理解程序本身的错误,例如语法错误。而异常则更偏向于程序运行不符合预期或者不符合正常流程;对于 PHP 语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑。 例如,我们希望通过捕获异常来处理除数为 0 的情况,但是在捕获到异常之前,PHP 就触发了错误。
也就是说,PHP 将除数为 0 的情况当成了错误而触发,而不会自动抛出异常,因此没法捕获。类似的,在很多情况下,PHP 都没办法自动抛出异常。只能通过 if - else 语句判断再结合 throw 方法来并手动抛出异常。 上述情况的发生,主要还是因为异常机制是 PHP 向面向对象演进后得到的产物。而在此之前 PHP 的报错主要还是通过错误机制php判断,因此,在很多情况下,PHP 的错误要比异常更有价值。不过 PHP7 开始统一这两者,使错误也可以像异常那样抛出(这部分内容将放在异常部分讲解)。 错误级别 PHP 中的错误可理解为 使脚本不运行不正常的情况,根据错误级别从高到低可划分为五类 Parse error 或 Syntax Error - 语法解析错误,触发该错误后,脚本完全无法运行;Fatal Error - 致命错误,触发该错误后,后面的脚本无法继续执行;Warning Error - 出现比较不恰当的地方,脚本可继续执行;Notice Error - 出现不恰当的地方,但是程度比 Warning Error 低,脚本可继续执行;Deprecated Error - 不推荐这么使用,未来可能会废弃,脚本可继续执行; 默认情况下,PHP 触发错误,并显示错误的级别及对应的提示。 Parse Error 示例 - 语句结尾不写分号
Fatal Error 示例 - 使用不存在的函数
Warning Error 示例 - 引入不存在的文件
Notice Error 示例 - 输出不存在的变量
Deprecated Error 示例 - 在一些字符串函数中传入数字而非字符串
除了默认触发消息外,用户也可以使用 set_error_handler 函数自定义错误处理,大多数错误类型都可以进行自定义处理,除了 E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING 外。
示例
用户也可以通过 trigger_error 函数来手动触发一个用户级别的错误(E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、E_USER_DEPRECATED)。
与错误有关的配置 一些错误处理相关的常用配置 《Modern PHP》提出了四个规则 一定要让 PHP 报告错误;在开发环境中要显示错误;在生产环境中不能显示错误;在开发环境和生产环境中都要记录错误; 开发环境推荐配置
生产环境推荐配置
Symfony 编码规范相关 异常和错误消息字符串必须使用 sprintf 来进行拼接;
当错误类型为 E_USER_DEPRECATED 时,需要添加 @
以上内容希望帮助到大家,更多PHP大厂PDF面试文档,PHP进阶架构视频资料,PHP精彩好文免费获取可以关注公众号:PHP开源社区,或者访问: 2021金三银四大厂面试真题集锦,必看! 四年精华PHP技术文章整理合集——PHP框架篇 四年精华PHP技术文合集——微服务架构篇 四年精华PHP技术文合集——分布式架构篇 四年精华PHP技术文合集——高并发场景篇 四年精华PHP技术文章整理合集——数据库篇 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |