=====错误类型====

PHP 主要有两种错误:触发错误和异常。

其中触发错误大概可以分为:编译错误、引擎错误和运行时错误,其中前两个是无法捕获的;

异常都是可以捕获的,当没有尝试捕获时则会中断代码。

触发错误可以通过 error_get_last() 来进行获得,异常可以使用标准的 try...catch 语句来捕获。

=====处理方式=====

【错误报告】

error_reporting() 函数是 PHP 提供的一个控制错误等级的函数,如果设置了对应的错误等级,则只会在对应错误等级触发时才会在页面(或输出,对于命令行来说)输出响应的错误信息。

error_reporting(int level) 支持等级 level 参数使用二进制的数字来配置错误等级,错误等级一般用常量来代替对应的二进制标识。例如:E_ALL、E_NOTICE、 E_USER_NOTICE 等等;如果不传递参数,则会返回当前的错误等级(一般用来保存当前的错误等级以供后续恢复)。

其中 E_PARSE、E_COMPILE_* 和 E_CORE_* 是非运行时错误,无法被捕获的

【php.ini】

配置文件是 PHP 初始化的默认配置,通过修改某些参数可以控制对应的初始化参数。如果要控制错误,可以通过以下几个方式来配置:

display_errors - 是否显示错误,一般在生产环境建议关闭该参数并和下列的参数一起试用 log_errors - 记录错误开关,如果打开会记录到对应位置 error_log - 记录错误日志的位置,不指定为系统默认 error_reporting - 同上面的函数

【错误抑制】

PHP 提供了一种特殊的操作,通过在语句前面加上抑制错误操作符@来抑制该语句出现错误。这种情况通常用于你不知道会发生什么情况下使用,比如打开了不确定的文件或者网络 URL,但一般不推荐使用

抑制错误本身内部做了一系列的处理才达到该效果,并且对于错误本身完全是未知的,一般情况下,不建议这么使用

【捕获异常】

几乎在所有语言中,都会有对于异常的处理。如果程序抛出一个异常,那么可以通过 try…catch 语句来捕获该异常,如果明确知道错误的类型,也可以只捕获该类型的错误。try…catch 是一种最标准的错误处理方式。

try {

// 代码部分

} catch (Exception $e) {

// 根据异常对象对 $e 进行处理

}

【设置错误处理器】

PHP 提供了 set_error_handler() 函数来让开发者传入一个函数名(或匿名函数,对于 5.2 以上的 PHP)就可以让所有的错误进入该函数,然后开发者可以在函数内进行控制,举例说明

set_error_handler(function($code, $msg){

log_error("$msg occur with code $code");

});

对应地,PHP 也提供了 restore_error_handler() 来恢复为标准的 PHP 错误控制。

【设置异常处理器】

如果每个异常都去捕获,显然是很复杂的事情,需要编写很多代码,而且维护起来会比较复杂,对于一个快速编程的语言来说,PHP 自然不会允许发生这种事情。使用 set_exception_handler() 就可以像上面错误处理控制器一样接收所有未捕获的异常,然后做一些该做的事情,甚至还可以再把错误抛出来。例如:

set_exception_handler(function($exception){

log_error("Exception occur: $exception");

});

【崩溃捕获】

该类处理并非 PHP 标准的处理方式,但对于某种使程序崩溃的无法捕获的错误确实很有用,它是指注册一个 shutdown 函数,在函数内通过调用 error_get_last() 来获取最后的错误,并且根据错误等级来做相应的处理。

register_shutdown_function(function(){

$error = error_get_last();

if ($error && $error['code']()() & error_reporting()) {

// 崩溃错误,记录日志

}

});

php防错处理,更好的PHP错误处理相关推荐

  1. facebook对话链接_如何应用防错原则,看看 Facebook 和 Gmail 是怎么做的

    欢迎来到有言有料,让思考更有张力 本文共 3873 字,预计阅读 10 分钟 作者|Siddharth Gulati 译者|张聿彤本文翻译已获得作者的正式授权(授权截图如下) 在用户界面(UI)设计中 ...

  2. 精益质量管理中执行防错管理的八大要点

    华天谋精益生产管理专家概述:防错技术是实践性很强的改进方法,主要依靠现场工作人员的经验来发现和实施,这在很大程度上妨碍了防错技术的推广,那么质量管理如何防错呢? - 1 - 质量管理理念与其他理念的区 ...

  3. 进阶篇:4.3)DFA设计指南:防错设计( 防呆设计)

    本章目的:每一个装配步骤都有设计防错. 1.前言 关于防错设计,作者有想说的话: 1)防错设计是DFA重要的一条.因为太过重要,作者单独开一分章写! 2)只有理解了设计防错的重要,才会去设计防错特征. ...

  4. 如何利用MES系统实现防错和预警?(详细整理,值得收藏)

    随着信息化技术的发展及管理水平的不断提升,信息化生产管理成为制造企业生产管理的重要手段,如何全面实时的掌握生产环节,掌握生产进度.产品质量数据及生产工人的工艺规范.合理控制产品物料批次.匹配配件型号, ...

  5. 浅谈汽车轮胎匹配视觉防错检测应用

    前段时间都是分享到理论成果,今天看到一篇是结合车厂实际状况来进行的,可以从不同角度看看机器视觉在汽车行业中的应用. 1  前言 工业 4.0 的核心是数据.随着智能装备和智能终端的普及以及各种传感器的 ...

  6. 如何利用MES系统进行生产防呆防错?

    一.认识MES系统的防呆防错功能 首先,我们要清楚了解,什么是MES系统的防呆防错.MES系统防呆防错是指利用MES系统来避免生产过程中的错误和缺陷,保障生产排程和生产过程顺利进行的过程.MES系统防 ...

  7. 说明使用assert和防错代码的区别

    说明使用assert和防错代码的区别 说到防错代码,我第一联想到的是#ifdef.#ifndef.#else.#endif之类的在预处理阶段的一些宏和一些条件判断.而assert函数则是在程序中使用的 ...

  8. VC中使用全局变量的2种办法及防错措施

    有人问特整理出来 1. 对于全局变量存在和函数一样的问题,为了在其他CPP文件中能够访问这些变量,必须在主文件的H文件中加上extern声明,格式如下: extern varibletype var; ...

  9. 汽车零部件物料配送防错漏视觉检测工作站

    目前汽车发动机装配车间的物料配送是依靠人工来准备的,没有防错漏以及追溯功能,存在质量风险,并且无法找出核心问题进行改善和纠正.因此,想要降低品质风险提高效率,物流科的生产线升级改造成为首要解决的问题点 ...

最新文章

  1. python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值
  2. 众人评说《我们在微软怎样开发(英文版)》
  3. python相关工具
  4. 怎么在mysql创建数据库怎么加入学号_数据库怎么创建学生信息表
  5. 图解 React-router 源码
  6. 微信小程序实战–集阅读与电影于一体的小程序项目(八)
  7. Java参数传递笔记
  8. 关得紧紧的 FreeEIM飞鸽传书
  9. 利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
  10. WebService的应用之winform身份验证
  11. macbook WIN10系统安装教程
  12. SpringBoot整合WebSocket案例
  13. 风控模型开发的特征选择与常用数据源介绍
  14. Linux基础、vim、find命令等
  15. 什么是互联网大厂_请问22届应届毕业生应该如何准备互联网秋招?
  16. 数学乐 --- 奇函数与偶函数(个人学习笔记)
  17. python语法糖 -- 列表正负数的排序
  18. spring--mvc用戶注册用户名验重
  19. 【Hive】(九)Hive 窗口函数总结
  20. 一个对C#程序混淆加密,小巧但够用的小工具

热门文章

  1. MySQL通过source命令执行sql文件
  2. You can‘t specify target table ‘XXX‘ for update in FROM clause
  3. nginx的脚本引擎(一)
  4. 如何高效的编写与同步博客 (.NET Core 小工具实现)
  5. 开源app之MyHearts
  6. 读取csv格式的数据
  7. BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
  8. 在ubuntu 12.04上安装tomcat 7.40
  9. Ubuntu下selenium+Chrome的安装使用
  10. 设计模式之开放封闭原则