一、PHP7异常结构

1、从 PHP7开始,将Error与Exception两条体系,都实现了统一的Throwable接口。

PHP7中的异常层次

Throwable 接口

2、PHP7改变之前版本的错误报告方式:

1)PHP7在编译预执行之前,会检查执行脚本的语法错误。如果有语法错误,直接返回500错误,不执行程序,也不会显示Parse error等错误信息。PHP5则不检查程序,执行程序后报告错误。

2)PHP7执行程序后,大多数 Fatal error 会作为 Error异常 抛出。try{}catch(Error $e){}可以catch到fatal error但无法catch到Notic,waring,自定义错误等不终止程序的错误。try{}catch(Exception $e){},可以catch到用户抛出的异常。如果想同时catch Exception与fatal error,可以用try{}catch(Throwable $e){}。

catch  Error

错误报告

catch  Throwable

异常报告

二、set_error_hanlder()    与    set_exception_handler()

1、set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )

1)、设置用户的函数 (error_handler) 来处理脚本中出现的错误。可以处理Notic,waring,trigger_error()等,不影响中断程序执行的错误。当设置了该函数,这些错误不受error_reporting控制。但是,比如fatal_error ,set_error_reporting处理不了的错误,还得受php.ini中error_reporting的控制。

Fatal error处理不了

执行结果

2)、callable,可以为'函数名',也可以为匿名函数,也可为 类名::方法名,[对象,方法],如下:

2、callable set_exception_handler ( callable $exception_handler )

1)、设置默认的异常处理程序,用于没有用 try/catch 块来捕获的异常。 在 exception_handler 调用后异常会中止。)

2)、callable,可以为'函数名',也可以为匿名函数,也可为 类名::方法名,[对象,方法],$exception_handler中的参数约定类型可以为Error(可捕获fatal error引发的error异常),Exception(可捕获exception异常),Throwable两者都可以捕获。如下:

三、总结与思考

1、在项目中尽力不要使用set_error_handler()进行处理Notic,waring等错误,应该交由error_log来记录,开发时因显示出来,方便开发。

2、可以使用set_exception_handler(),Throwable,来处理未捕获的异常及fatal error错误。

3、正常的异常,应该用try{}catch(){}来捕获,自定义的各种异常,建立相应的异常类extends Exception,这样代码层次更清晰,也方便各种业务异常的处理。

php7异常抛出的好处,PHP7的错误与异常相关推荐

  1. java 抛出异常的作用_Java 基础之异常抛出

    Java 基础之异常抛出 Java,基础,异常抛出 在 Java 里,除了对异常的捕获外,你还可以抛出异常,还可以创造异常.抛出异常的作用就是告诉你的调用者,程序出现了不正常的情况了,得不要期望的结果 ...

  2. Python3.2官方文档翻译--异常抛出和自定义异常

    Python3.2官方文档翻译--异常抛出和自定义异常 Python3.2官方文档翻译--异常抛出和自定义异常,有需要的朋友可以参考下. 6.4 抛出异常 Raise语句运行程序员强制抛出一个具体的异 ...

  3. 简单介绍Go语言错误处理异常捕获+异常抛出

    这篇文章主要介绍了Go语言错误处理异常捕获和异常抛出,Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现了函数可以返回错误类型以及简单的异常捕获,虽然简单但是也非常精妙,大大的提高了运 ...

  4. AspectJ的注解开发AOP:异常抛出通知的学习

    AspectJ的注解开发AOP:异常抛出通知的学习 参考文章: (1)AspectJ的注解开发AOP:异常抛出通知的学习 (2)https://www.cnblogs.com/xiaolaha/p/1 ...

  5. java的异常抛出throws和throw的简单使用

    java的异常抛出throws和throw的简单使用 参考文章: (1)java的异常抛出throws和throw的简单使用 (2)https://www.cnblogs.com/Anxc/p/113 ...

  6. 【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )

    文章目录 I 异常处理 II 字符串异常 III 异常对象 IV 抛出任意类型对象 V 自定义异常 VI 异常相关代码 I 异常处理 1. 异常处理 : 使用 " try{}catch(){ ...

  7. Java:异常的概念及分类、异常的处理、异常抛出及自定义异常

    异常概念 异常分类   Java异常处理机制 try ...catch...finally throw和throws 自定义异常 一.异常的概念         什么是异常?             ...

  8. Spring-AOP 通过配置文件实现 异常抛出增强

    概述 实例 概述 异常抛出增强表示在目标方法抛出异常后实施增强,最适合的场景是事务管理,比如当参与事事务的方法抛出异常后需要回滚事务. 异常抛出增强类需要实现ThrowsAdvice接口,Throws ...

  9. python 使用raise语句主动抛出异常(Exception)、将异常抛出给上一级

    主动抛出异常 示例: 参考文章:使用Python提供的raise语句主动抛出异常 将异常抛出给上一级 示例: # -*- coding: utf-8 -*- """ @F ...

最新文章

  1. win bat 输入参数
  2. 本地计算机用户改名,win10本地账户管理员怎么改名,详细操作步骤请看本篇
  3. 一文详解 Prometheus 的高可用方案:Thanos
  4. 548B. Mike and Fun
  5. setw()(转载)
  6. Linux基础:linux网络接口
  7. [220207] Find the Difference
  8. 利用 FFT 模拟菲涅尔衍射积分
  9. 巧妙突破大容量邮箱附件大小限制(zz)
  10. Vue脚手架安装流程详解
  11. JS Module Revealing Module Pattern
  12. Universal Link|iOS开发者不得不知的技术
  13. Linux部署docker容器(使用root用户登录)
  14. 目前国内的高频交易系统的延迟做到了什么水平?
  15. 【计算机网络】计算机网络
  16. word 分章节,如何下一章页眉单独改动,不影响上一章
  17. 安卓EROFS (Read-only file system)的解决
  18. 一场虚拟现实密室逃脱冒险,让你见识科技新加坡
  19. 一张图搞清楚中国茶叶分类
  20. ubuntu ps功能安装

热门文章

  1. 3.1EDA和数据描述: 探索性数据分析
  2. 2017年3月21日
  3. C语言 函数指针一(函数指针的定义)
  4. content-providers
  5. 开好会议有诀窍------(转)
  6. PHP开发者最好的学习资源收集
  7. Bailian3253 集合的划分【递归】
  8. Bailian4042 Rabin-Karp字符串匹配【文本】
  9. Bailian4041 矩阵运算【数学计算】
  10. 《程序设计技术》课程辅助学习资料