PHP异常与错误处理机制
先区别一下php中错误 与 异常的概念吧
PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。平时遇到的warming、notice都是错误,只是级别不同而已。
PHP异常:一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。
PHP异常处理机制借鉴了java c++等,但是PHP的异常处理机制是不健全的。异常处理机制目的是将 程序正常执行的代码 与 出现异常如何处理的代码分离。
PHP是无法自动捕获异常的(绝大多数),只有主动抛出异常并捕捉。也就是说,对于异常,是可预见的。
以除数为0为例,看看PHP是如何处理的
<?php
$a = 0;
try {
echo 4/$a;
}
catch (Exception $e){
echo $e->getMessage();
}
//报错,PHP是无法自动捕获异常的,必须手动抛出
?>
下面手动抛出
<?php
$a = 0;
try {
if($a == 0){
throw new Exception('除数不能为0', 1);
}
echo 4/$a;//不会执行
}
catch (Exception $e){
echo $e->getMessage();
}
?>
可以看到,catch捕获到了异常。
PHP中对于异常的机制使用,一般用于业务逻辑判断上面,当业务逻辑不正常时,进行特殊处理。
下面看一下PHP错误处理机制。PHP提供了set_error_handler()函数进行错误处理。当错误发生时,set_error_handler会统一处理错误。
如下所示
<?php
$a = 0;
function handle($errno,$errstr,$errfile,$errline){
echo $errfile;
}
set_error_handler('handle'); echo 4/$a;
echo PHP_EOL;
echo 'hehe';
?>
上面的
echo 4/$a;发生了错误,此时进入了错误处理函数handle中,进行错误处理,一般我们在handle中加入die,终止执行。
PHP异常与错误处理机制的更多相关文章
- php优秀框架codeigniter学习系列——异常和错误处理机制
这篇介绍下CI框架的异常和错误处理机制. 在入口文件index.php中,根据设置的环境参数设置error_reporting的范围,和是否显示错误. 在CI初始化程序CodeIgniter.php中 ...
- 细说php的异常和错误处理机制
再谈php错误与异常处理 讲的非常好 w3school php异常处理机制 php错误异常处理详解 注: 关注set_error_handler() set_exception_handler() r ...
- Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析
前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...
- Atitit 错误处理机制:(1)静默模式(2)警告模式 (3)异常模式
Atitit 错误处理机制:(1)静默模式(2)警告模式 (3)异常模式 三. PDO的错误处理机制: (1)静默模式 默认情况下与mysql处理方式一致,不现实错误信息(静默模式 ...
- javascript中的错误处理机制
× 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...
- 拦截PHP各种异常和错误,发生致命错误时进行报警,万事防患于未然
在日常开发中,大多数人的做法是在开发环境时开启调试模式,在产品环境关闭调试模式.在开发的时候可以查看各种错误.异常,但是在线上就把错误显示的关闭. 上面的情形看似很科学,有人解释为这样很安全,别人看不 ...
- ASP.NET的错误处理机制之一(概念)
对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制.当错误发生时,我们必须做好两件事情:一是将错误信息记录日志,发邮件通知网站维护人员,方便技术人员对错误进行 ...
- PHP 错误处理机制
在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息:有些错误异常会终止脚本执行,这个时候 ...
- .net错误处理机制(转)
asp.net 提供了4中错误机制:Page_Error事件>ErrorPage属性>Application_Error事件> <customErrors>配置项 ① P ...
随机推荐
- 圆满完成Selenium自动化测试周末班培训课程!
圆满完成Selenium自动化测试周末班培训课程! http://automationqa.com/forum.php?mod=viewthread&tid=2704&fromuid= ...
- 微信、qq时间格式模板
产品近来蛋疼,时间格式从做完到现在改了四遍了 ,最新的要求如下: * 2分钟内 无显示 * 2分钟-24小时 HH:mm * 昨天 昨天 HH:mm * 前天 前天 HH:mm * 今年 MM:DD ...
- ios ZBar扫二维码奇奇怪怪的错误
Undefined symbols for architecture armv7: "_CVPixelBufferGetHeight", referenced from: -[ZB ...
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...
- 关于JavaScript中apply与call的用法意义及区别
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. cal ...
- 《微信小程序七日谈》- 第一天:人生若只如初见
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
- C#序列化JSON
public static string ConvertToJsonString<T>(T instance) { using (MemoryStream stre ...
- IOS开发UI基础UIPageControl的属性
UIPageControl 常见属性: • numberOfPages // 设置有多少页 默认为0 [pageControl setNumberOfPages:kImageCount]; • ...
- flex布局浅谈和实例
阿基米德曾说给我一个支点我可以撬动地球,而拥有flex基本可以撬动所有的布局. 1.flex布局基本介绍及效果展示 工欲善其事必先利其器,来来来,一起看下基础知识先(呵~,老掉牙,但是有用啊). ** ...