如何做好错误处理?(PHP篇)
起因
之前我在封装 PHP 一个类库的时候,如果有遇到错误(例如构造函数传参不合法的话),则直接 die() ,后来发现这种方法很不好,会直接退出程序。
所以我想到给 PHP 上异常捕获的机制了。
错误处理的原则
1、一定要让 PHP 报告错误
2、在开发环境中要显示错误
3、在生产环境中不能显示错误
4、在开发和生产环境中都要记录错误
PHP 错误处理的种类
一、@
尽管我们可以在可能触发错误的函数前加上 @ 抑制符,不让 PHP 触发错误,但这有悖于常规做法,不建议这么做。
二、die()
因为 die() = exit() ,遇到错误直接退出,很不友好。
但是早期的一些 PHP 框架和类库还在使用这种方法,例如 codeigniter。
三、Error
(1) 实例:
//错误处理函数
function MyError($level, $message, $file = '', $line = 0, $context = [])
{
//todo...
}
//设置错误处理函数
set_error_handler("MyError", E_ALL & ~E_NOTICE); //排除了 E_NOTICE,拦截没有必要的错误提示
// 触发错误
$test=2;
if ($test>1)
{
trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
//恢复错误处理设置(可选)
//restore_error_handler()
(2) 错误处理函数 的参数(对应例子中的 MyError())
| 参数 | 描述 |
|---|---|
| error_level | 必需。为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。 |
| error_message | 必需。为用户定义的错误规定错误消息。 |
| error_file | 可选。规定错误发生的文件名。 |
| error_line | 可选。规定错误发生的行号。 |
| error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
(3) error_level (错误报告的级别)
| 值 | 常量 |描述 |
| :------------: |:-------------
如何做好错误处理?(PHP篇)的更多相关文章
- 前端监控系统(二)JS错误日志收集篇
前端监控系统 目前已经上线,欢迎使用! 服务器搭建好了,可以着手开发了. 其实前端需要分析的数据有很多,包括,PVUV, 接口请求统计,耗时统计,JS错误统计,用户使用设备统计,用户地域分布,页面用户 ...
- Python程序的常见错误(收集篇)
关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...
- VS2008常见编译错误(总结篇)
错误1:fatal error C1853: “Debug\mydll.pch”预编译头文件来自编译器的早期版本 项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式(主要是因为 ...
- VSFTPD配置和错误 ,这篇文章也太厉害了
配置过程 1.关闭防火墙 service iptables stop 2.启动vsftpd service vsftpd start 3.添加root用权 cd /etc/vsftpd 更改 ...
- Alamofire源码解读系列(二)之错误处理(AFError)
本篇主要讲解Alamofire中错误的处理机制 前言 在开发中,往往最容易被忽略的内容就是对错误的处理.有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就 ...
- 第九篇:Map/Reduce 工作机制分析 - 作业的执行流程
前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...
- CentOS7搭建FastDFS V5.11分布式文件系统-第一篇
1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...
- SQL Server的AlwaysOn错误19456和41158
SQL Server的AlwaysOn错误19456和41158 最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题 软件版本 SQL Server2 ...
- Qt5.3编译错误——call of overloaded ‘max(int int)’is ambiguous
错误描述: 今天在使用Qt写一个C++函数模板的测试程序的时候,编译的时候,编译的时候出现如下错误: 错误描述为:在main函数中,进行函数max()重载时,出现(ambiguous)含糊的,不明确的 ...
随机推荐
- day08作业---函数
'''2.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者.'''#学会了 原来 range(len(iter)) 是 从零到len-1 的数的组合 建新放在 ...
- WebSocket 处理事件
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...
- 【RabbitMQ】三种类型交换器 Fanout,Direct,Topic(转)
出处:https://blog.csdn.net/fxq8866/article/details/62049393 RabbitMQ服务器会根据路由键将消息从交换器路由到队列中,如何处理投递到多个队列 ...
- asp.net core跨平台开发从入门到实战文摘
第1章 .NET Core 第2章 dotnet命令 第3章 VS Code安装及介绍 第4章 VS2015开发.NET Core 第5章 ASP.NET Core 第6章 EF Core 第7章 A ...
- (17)Questioning the universe
https://www.ted.com/talks/stephen_hawking_asks_big_questions_about_the_universe/transcript00:13There ...
- springboot+mysql实现quartz集群搭建
一.基本概念 Quartz核心的概念:scheduler任务调度.Job任务.Trigger触发器.JobDetail任务细节. scheduler任务调度: 是最核心的概念,需要把JobDetail ...
- c++关键字volatile的作用
1.易变性 1.1概念 编译器对volatile修饰的变量,当要读取这个变量时,任何情况下都会从内存中读取,而不会从寄存器缓存中读取(因为每次都从内存中读取体现出变量的“易变”) 1.2测试代码(VS ...
- centos6上安装jenkins
一.安装jdk 1.下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- TreeSet集合为什么要实现Comparable?
首先,让我们来看看JDK中TreeSet类的add方法 /** * Adds the specified element to this set if it is not already presen ...
- 安装BouncyCastle
对于Windows而言 将bcprov-jdk16-146.jar 复制到C:\Program Files\Java\jre6\lib\ext和C:\jdk1.6.0\jre\lib\ext目录下: ...