大家好,霖霖来为大家解答以上问题。php 异常处理,PHP7系列中的异常处理很多人还不知道,现在让我们一起来看看吧!
PHP7系列中的异常处理
在PHP中碰到异常的时候我们应该怎么处理呢?以下是小编精心为大家整理的PHP7系列之-异常处理,希望对大家处理编程异常有所帮助!
PHP7中的异常处理
在PHP7中异常或者说错误被分为不同的等级
1. 语法错误级别,也就是经常看到的Parse Error,这种错误,会在Zend引擎进行语法分析和编译的时候就提示错误,注意这种错误一般都是比较低级的手写错误,或者是关键词写错,或者是少些一些分号等。对于这类错误,一般设置error_reporting(E_ALL)或者ini_set('display_errors','on'),在发生错误的时候,就会抛出异常,通过追踪异常堆栈就可以发现问题所在
2. Fatal Error错误,这种错误一般会导致PHP进程直接退出,也就是导致场景的白屏现象或者webserver返回500。这种错误是不能捕获的,无法通过try...catch或者其他手段进行处理。(PHP7在这一块做了比较明显的升级,方便我们更好的处理部分异常,详见后文分析)
3. 正常的Exception。对于Exception我们常见的处理方式有两种,一种是用try...catch语句。
另一种的写法常见于MVC框架,就是调用钩子函数,在作者写的Pfinal MVC框架中就用了这种方法,可以做到全局处理异常,当有未捕获的异常的时候,使用钩子函数注册的处理函数进行处理,不至于会把异常堆栈丢给用户,这是PHP5中高级一点的异常处理方法。以下是作者的Pfinal框架中的异常处理核心文件
PHP7中的异常处理升级
PHP7的改动中,影响比较大的,包括异常处理。PHP7实现了一个全局的throwable接口,原来的Exception和部分Error都实现了这个接口(interface), 以接口的方式定义了异常的继承结构。于是,PHP7中更多的Error变为可捕获的`Exception返回给开发者,如果不进行捕获则为Error,如果捕获就变为一个可在程序内处理的Exception。这些可被捕获的Error通常都是不会对程序造成致命伤害的Error,例如函数不存。
PHP7中,基于/Error exception,派生了5个新的engine exception:ArithmeticError / AssertionError / DivisionByZeroError / ParseError / TypeError。在PHP7里,无论是老的/Exception还是新的/Error,它们都实现了一个共同的interface: /Throwable。
对比原来的PHP5,
处理语法错误Parse Error,针对于语法错误,原来的PHP5是遇到语法错误,就会终止PHP进程,同时抛出语法错误的提示。在新的PHP7中,这种异常类型被封装为ParseError异常类,你可以在代码中通过try...catch(ParseError $e){}来处理,妈妈在也不用担心我少写一个分号会导致系统直接奔溃了
处理Fatal Error,例如以下代码函数参数定义是classInstanceA的类型,但是实际调用的时候传入了classInstanceB的类型,在PHP5中,会触发一个Fatal Error,导致进程终止运行。
现在在PHP7中,可以通过捕获异常,处理以上错误,不会抛出Fatal Error
本文到此结束,希望对大家有所帮助。