php错误处理和异常处理

时间:2020-12-20 00:47:10

PHP错误处理有两种:标准的错误处理和异常(OOP语法新出现的错误处理机制)

php错误处理和异常处理

标准错误是由:错误等级,错误信息,错误发生文件,与错误发生行号组成。php提供了多种错误等级,用来描述错误的重要程度。

标准错误两种触发形式:
php自动触发: php检测到存在一个错误,则会将错误触发
用户脚本触发:
利用内置函数trigger_error('错误消息','错误级别');
错误级别只能使用常量来表示:默认是notice级别:E_USER_NOTICE
警告:E_USER_WARNING,致命错误:E_USER_ERROR

处理:错误报告

将错误消息直接输出到标准输出(标准错误)
这个功能是可以通过php的配置进行控制

error_reporting 控制的是哪种级别的错误应该被报告
display_errors  是否开启页面错误功能(开启则在页面输出,不开启则不输出)
以上两个配置都支持在用户脚本修改:通过ini_set('配置项的名',值)

显示所有错误:E_ALL|E_STRICT ,其他:E_NOTICE,E_WARING,E_ERROR
常用的在开发时,开启全部: ini_set('display_errors',E_ALL|E_STRICT);
在生产时,关闭所有:ini_set('display_errors',0)

错误日志
一旦发生错误,将信息记录到日志文件内
是否开启错误日志: ini_set('log_errors',1);
错误日志的位置: ini_set('error_log',d:/error.log);
注意:错误日志和错误报告是可以同时存在的。

自定义错误处理器:
用户自定义一个函数,一旦错误发生,执行用户的函数来处理函数,用户自定义的函数,称为错误处理器
设置一个用户定义的错误处理函数:set_error_handler("用户自定义函数")
php错误处理和异常处理

php错误处理和异常处理
关于error级别的处理,致命错误是不能被处理的(不能从错误中恢复)
如果自定义了用户的错误处理器,E_USER_ERROR是可以被恢复的

一旦定义用户错误处理器,系统的错误处理方式是否还会执行?
不会,如果这个用户的自定义处理器返回false,则表示用户处理完毕,交由系统的继续处理
在项目中通常通常分为开发模式和生产模式:

开发模式,显示所有的错误报告:
ini_set('error_reporting',E_ALL|E_STRICT);
ini_set('display_errors',1);
ini_set('log_errors',0);
生产模式,屏蔽所有的错误报告,但是记录错误日志
ini_set('display_errors',0);
ini_set('error_log','d:/error.log');
ini_set('log_errors',1);

错误处理之异常

异常是一种php对oop语法,提供的典型的错误的处理方法,在oop语法中,大家可以在发生问题,通过异常的方式,进行管理,异常也是一个错误,只不过是将错误信息放置在一个对象中,异常有个前提,保证语法是正确的
异常的处理由发生和处理组成:
所谓发生:指的的是抛出一个异常,利用throw 完成
所谓处理:一旦异常出现,如何得到并处理这个异常,由两个阶段组成,监听(try)和捕获(catch)

php错误处理和异常处理

自定义异常处理器:(异常处理器就是一个对象)

如果说一个异常被抛出了,但是没有被捕获,就会触及一个E_ERROR级错误,可以利用异常的自定义处理器完成对未捕获异常的处理

创建自定义的错误处理类

1,Myception类继承了Exception类的属性和方法,是原异常类的扩展

2,创建errorMessage 方法,如果email不合法,则该方法返回错误

3,执行try代码块,由于email不合法,抛出异常

4,catch 代码块捕获异常,并显示错误消息

php错误处理和异常处理

php错误处理和异常处理

set_exception_handler()     设置一个用户定义的异常处理函数

通俗的讲:就是当你的程序需要抛出一个异常的时候调用哪个自定义的函数,就这么简单