PHP 程序员也要学会使用“异常”
2015-01-24信息快讯网
“PHP程序员,特别是从php4,甚至是PHP3中成长起来的程序员,很多都不习惯使用抛出异常这种错误处理方式。虽然php5引入了异常处理机制,但是很多php程序员还是没有真正的掌握并使用它。
网站完全开放的特性,决定了网站比任何传统软件都更希望做到“系统看起来永远都是能够正常工作的”,所以采用正确的程序错误处理方式尤为重要。理论上来说,如果设计足够完美,开发人员足够谨慎,程序出现错误的可能为0.但事实恰恰相反,复杂的业务逻辑,不同的硬件环境,或者不可信任的用户输入,都可能导致程序出错,服务当机。所以在稍微有点复杂的系统中,有个完善的错误机制是必须的。
在php5之前,因为缺乏对异常的支持。在做复杂的开发时,常常采取比较原始的“处理错误数值+记录log”的处理形式。
如:
function getResult($a,$b) { ....... if fatal error occur return "error_type1"; ..... } $result = getResult($a,$b);//理论上,getResult函数总能正确的返回$result if($result=='error_type1')//但在一些特殊情况.$result无法正常取得 { writeLog('result is empty!');//记录下log die();//或者其他更“友好的”处理方式 }
理论上,通过“处理错误数值+记录log”的方式也可以达到我们的目标(事实上确实如此,在php3,php4的时候,已经出现了很多成功且足够复杂的系统,他们甚至考虑到所有的情况,因此不需要记录任何log)。但技术总要向前发展的,更何况,决大多数的开发人员并不具备牛人的严谨到滴水不漏的思维,所以我们还是不得不认真思考“如何处理程序错误”的问题。
上面的“错误处理+记录log”的方式,存在如下弊端:
1 如果错误情况太多,那相应的错误处理代码需要增加很多,这非常损害程序的可读性。你的程序看起来是“断断续续的”。
2 如果程序的逻辑很复杂(比如程序的函数调用非常复杂,如在 getResult2()函数 中调用 getResult() 的情况,甚至更复杂的多级嵌套的情况),那错误数值的传递处理会让你疲于奔命。因为为了确保错误能够得到有效的处理,你必须保证: 以无损耗的方式传递错误数值。
所以,改变这种原始的错误处理方式吧。引入异常处理机制,你会发现可喜的变化:
1 代码可读性大大增强。开发程序时逻辑思维变得很连贯,在“可疑的”地方,你只要抛出个异常就可以了。至于怎么处理,完全可以等到后面再去补充。当然,对于程序的读者,也不会觉得有被打断的感觉。
2 再也不需要考虑“错误数值如何无损耗的进行传递”这种费力又不怎么讨好的问题了。因为异常向上传递的特性,你的函数嵌套个2层,3层,再多层都没有问题。你只需要在外层有捕获异常的操作就可以了。
3 异常可以自由的定制,你可以按照功能对异常进行分类,更好的管理各种程序错误。同时对于你也可以更灵活的定制异常的处理方式。比如,在异常类里面实现记录log的功能等。
当然,是否使用异常要根据需求而定。php的一大特性就是部署快,如果是很小的项目,逻辑很简单,那使用一般的错误数值处理方式也许能够更快的部署。
PHP学习笔记之二
PHP学习笔记之一
php下连接mssql2005的代码
Php Image Resize图片大小调整的函数代码
php生成随机密码的几种方法
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
php关于array_multisort多维数组排序的使用说明
PHP中foreach循环中使用引用要注意的地方
php下尝试使用GraphicsMagick的缩略图功能
PHP中simplexml_load_string函数使用说明
PHP的autoload自动加载机制使用说明
IP攻击升级,程序改进以对付新的攻击
PHP程序员最常犯的11个MySQL错误小结
发一个php简单的伪原创程序,配合商城采集用的
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
深入理解PHP原理之异常机制
PHP原理之异常机制深入分析
php MYSQL 数据备份类
phpmyadmin 访问被拒绝的真实原因
两个强悍的php 图像处理类1
PHP写MySQL数据 实现代码
php ignore_user_abort与register_shutdown_function 使用方法
PHP 定界符 使用技巧
C# Assembly类访问程序集信息
PHP加速 eAccelerator配置和使用指南
PHP 服务器配置(使用Apache及IIS两种方法)
PHP 错误之引号中使用变量
php 信息采集程序代码
php 异常处理实现代码
在JavaScript中调用php程序
隐性调用php程序的方法
php Try Catch异常测试
php实现从ftp服务器上下载文件树到本地电脑的程序
php5编程中的异常处理详细方法介绍