在PHP中碰到异常的时候我们应该怎么处理呢?以下是百分网小编精心为大家整理的PHP7系列之-异常处理,希望对大家处理编程异常有所帮助!更多内容请关注应届毕业生网!

  PHP5中的异常处理

  在PHP5中异常或者说错误被分为不同的等级

  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。在PHP 7里,无论是老的/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


更多相关文章推荐:

1.《php7 PHP7系列之-异常处理》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《php7 PHP7系列之-异常处理》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/97298.html