【PHP基础学习】—PHP错误和异常机制

前言

以前版本的PHP只有错误没有异常。PHP5版本之后,有了异常机制,同时也完善了错误机制。我们可以在官方文档找到所有的错误的定义,这些错误可以大致分为 WARNING,ERROR(fatalerror),NOTICE等;至于异常,异常是对程序错误的一种优秀的处理方式,较于错误,异常的优点是默认打印调用栈,便于调试,可控等,对异常的处理也要遵循前述的错误处理规则。本章就来总结一下PHP的错误和异常机制。

一、PHP的错误机制

1、PHP的错误级别
PHP的错误级别,现在基本划分为15个错误级别:


2、PHP的错误控制
PHP的错误,可以由php语言解释器本身以及php进程管理器(Nginx用php-fpm)或者管理模块(Apache用Module)来控制,这里以Nginx架构为例,以php+php-fpm的模型来说,会影响php错误显示的其实是有两个配置文件,一个是php本身的配置文件 php.ini,另外一个是php-fpm的配置文件, php-fpm.conf
(1)php.ini中的配置


(2)error_reporting和display_errors的区别
PHP默认是会在日志和标准输出(如果是fpm模式标准输出就是页面):
a. error_reporting的参数是错误级别。表示什么样子的级别才应该触发错误。我们可以通过调用这个参数来定义需要触发的错误,不需要触发的,不管是日志,还是页面,都不会显示这个错误。
b. display_errors是控制是否要在标准输出展示错误信息,可以设置为ON或者OFF
c.log_errors则是控制是否要在日志中记录错误信息。

注:另外还有ignore_repeated_errors这个标记控制的是如果有重复的日志,那么就只会记录一条,比如:ini_set('ignore_repeated_errors', 1);

(3)php-fpm中的配置


php-fpm的配置中也有一个error_log配置,这个很经常会和php.ini中的error_log配置弄混。但他们记录的东西是不一样的, php-fpm的error_log只记录php-fpm本身的日志,比如fpm启动,关闭。
而php.ini中的error_log是记录php程序本身的错误日志。

error_log是显示错误日志的位置,这个在php-fpm中往往会被重写,于是往往会发现的是cli和fpm的错误日志竟然不是在同一个文件中。

二、PHP的异常机制

在我们的日常开发中,不可能保证可以catch所有的异常,而未被catch的异常将以fatal error的形式中断脚本的执行并输出错误信息。所以要借助 set_exception_handler,统一处理所有未被 catch 的异常。我们可以像error_handler那样,在exception_handler中处理log,将数据库的事务回滚。

PHP7的异常机制
PHP 7改变了大多数错误的报告方式。不同于传统PHP5的错误报告机制,现在大多数错误被作为Error异常抛出。
PHP7中是将曾经的fatal error变成了Error抛出,而fatal error一般都是一些不需要在运行时处理的错误,这种错误旨在提醒程序员,这里的代码写的有问题,需要修复,而不是逻辑上要catch它做某些业务。
因此,绝大多数情况下,我们并不需要继承Error,甚至catch Error也不常见,只在某些需要log,回滚数据库,清理现场等场合才需要这样做。

三、总结和实际应用

1、必须用error_reporting让PHP报告错误;
2、在开发环境中时要显示错误;
3、在生产环境中不能显示错误;
4、在开发和生产环境中都要记录错误。生产环境最好能够有日志收集系统

四、参考文档

http://www.laruence.com/2010/08/03/1697.html
https://mp.weixin.qq.com/s?__biz=MzUyNDg1Nzg1OA==&mid=2247484928&idx=2&sn=d988c296b6729abb4f5047c60bd5d633&source=41#wechat_redirect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值