php 里有一套错误处理机制,可以使用 set_error_handler 接管 php 错误处理,也可以使用 trigger_error 函数主动抛出一个错误。

set_error_handler() 函数设置用户自定义的错误处理函数。函数用户创建运行期间用户自己的错误处理方法。它需要先创建一个错误处理函数,然后设置错误级别。

语法:

set_error_handler(error_function, error_types)  

参数:

error_function:规定发生错误时运行的函数。必需。

error_types:规定在哪个错误报告级别会显示用户自定义错误。可选。默认为 “E_ALL”。

使用该函数,会完全绕过标准 php 错误处理函数(除非在错误处理函数中返回 false)。

示例:

function customError($errno, $errstr, $errfile, $errline)
{
echo "错误代码:[$errno] $errstr" . PHP_EOL;
echo "错误所在代码行:$errline 文件 $errfile" . PHP_EOL;
// die;
}
set_error_handler("customError"); 5/0;

  

输出:

错误代码:[2] Division by zero
错误所在代码行:15 文件 /xxx/test.php

  

在这里有一个需要说明的是:php 中的错误和异常是不一样的。php 中的错误默认是无法通过 try...catch 捕获的,如果我们想要捕获,可以在 error handler 里面捕获错误之后抛出一个异常。

我们也可以在某些地方使用 restore_error_handler 取消自定义的错误处理。

对于 fatal error:

如果我们也想对其进行一些处理,php 也提供了 register_shutdown_function,这个函数会在 php 程序终止或者 die 时触发一个函数。

对于 parse error,我们可以修改 php.ini 添加配置:

log_errors=On

error_log=usr/log/php.log

总结:

在 php 中,错误和异常是两个不同的概念,这种设计从根本上导致了 php 的异常和其他语言相异。Java 中,异常是错误唯一的报告方式。而 php 中异常绝大部分必须通过某种方法手动抛出,才能被捕获到,是一种半自动化的异常处理机制。

无论是错误还是异常,都可以使用 handler 接管系统已有的处理机制。

最新文章

  1. 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro
  2. Android 千牛数据库分析
  3. 移动端Web页面问题(转载)
  4. [转] Android优秀开源项目
  5. 【代码笔记】iOS-淡出淡入效果
  6. 初次体验VS2015正式版,安装详细过程。
  7. hadoop,mapreduce---分布式计算
  8. BackgroundWorker的使用方法
  9. C#之参数线程
  10. 如何将XSD文件以及引入import的文件生成相应的C#类。
  11. RF-BM-S02(V1.0)蓝牙4.0模块 使用手册
  12. AppDomain(1)-AppDomainSetup
  13. 关键字throw(something)限制
  14. Mybatis整理_01
  15. SSH深度历险(四) Maven初步学习
  16. python-初识python
  17. 线程池工厂方法newFixedThreadPool()和newCachedThreadPool()
  18. Linux ACL 权限
  19. 如何将打包好的文件做成一个APP
  20. C# 中颜色和名称样式对照表

热门文章

  1. Erlang数据类型的表示和实现(1)——数据类型回顾
  2. Python发送邮件(最全)
  3. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!
  4. jdk8 Optional使用详解
  5. 欢迎来怼--第三十七次Scrum会议
  6. Task 8 找水王
  7. mvc 路由配置-学习2
  8. IT行业的个人见解
  9. 个人作业-Week 3
  10. jmeter 常用内置变量