`
#rethink#
  • 浏览: 46927 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

PHP程序员也要学会使用“异常”

阅读更多

“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 程序员也要学会使用“异常”

    1. **增强代码连贯性**:使用异常,程序员可以在可能出现错误的地方直接抛出异常,而不是立即处理。这使得代码逻辑更加清晰,避免了中断正常流程的处理代码。 2. **简化错误传递**:异常可以自动向上层函数传播,...

    PHP程序员常备手册

    【PHP程序员常备手册】是一本为PHP开发者量身打造的综合参考资料,涵盖了从基础语法到高级技巧的各种知识点。PHP是一种广泛使用的服务器端脚本语言,尤其在网页开发领域具有重要地位。本手册旨在帮助PHP程序员提升...

    一个PHP程序员必须会的PHP知识

    8. **错误与异常处理**:理解PHP的错误报告机制,学会使用try...catch来处理异常,以及如何设置自定义错误处理器。 9. **面向对象编程**:PHP支持面向对象编程,包括类的定义、继承、封装、多态,以及魔术方法的...

    2017泰牛程序员php就业班

    6. **错误与异常处理**:理解错误与异常的区别,学会如何优雅地处理运行时问题,提高代码的健壮性。 7. **数据库交互**:PHP通常与MySQL等数据库进行交互,你需要学习SQL语言,以及使用PHP的PDO或mysqli扩展来执行...

    十天掌握PHP编程,成为一个真正的PHP程序员

    因此,学习一种主流的PHP框架,理解其工作原理和使用方法,是成为真正PHP程序员的标志。 在压缩包文件“十天学会PHP”中,可能包含了逐步教程、练习案例和参考资料,通过实践和理论相结合的方式,帮助学习者巩固所...

    PHP 十天学会(电子版).rar

    总的来说,《PHP十天学会》教程将引导你从零开始,逐步成为一名能够独立开发PHP Web应用的程序员。通过理论学习与实战训练相结合的方式,你将在短短十天内掌握PHP的基本技能,为今后的Web开发之路打下坚实的基础。...

    10天学会php(从精通到入门)

    学会如何设置错误报告级别,使用var_dump和debug_zval_dump等工具分析变量,以及利用PHP的异常处理机制,可以有效地定位和修复问题。 最后,了解一些最佳实践和设计模式,如MVC(模型-视图-控制器)架构,有助于...

    PHP WEB程序设计

    - session与cookie:理解会话管理和持久存储用户状态的方法,学会使用`session_start()`、`$_SESSION`数组以及cookie设置。 - 用户认证与授权:构建简单的登录和注册系统,实现用户身份验证和权限控制。 7. **...

    php 学习(教程,源码)

    在IT领域,PHP是一种广泛使用的开源脚本语言,尤其在Web开发中占据着重要的地位。... ... ...理解这些基本概念是构建复杂程序的...通过系统学习并结合实际项目练习,你将在PHP开发的道路上不断进步,成为一名熟练的PHP程序员。

    程序员面试之葵花宝典,全面常见的面试题,有答案,编程方面全面提高

    《程序员面试之葵花宝典》是一本针对程序员面试精心编撰的指南,它涵盖了广泛且常见的...在实际学习过程中,不仅要理解答案,更要学会如何运用这些知识去解决实际问题,这样才能在面试中脱颖而出,顺利进入理想的公司。

    php课程详细文档

    这份“php课程详细文档”涵盖了成为一名合格PHP程序员所需掌握的所有核心知识,旨在帮助学习者系统性地理解和应用PHP。 首先,我们需要理解PHP的基础概念。PHP是一种嵌入HTML中的脚本语言,可以在服务器端执行,...

    基于PHP的安卓论坛类网站php版源码.zip

    【标题】中的“基于PHP的安卓论坛类网站php版源码”表明这是一个使用PHP编程语言开发的论坛网站项目,主要用于安卓用户交流讨论的平台。PHP是一种广泛使用的开源服务器端脚本语言,尤其适合Web开发,可以嵌入到HTML...

    PHP从入门到精通(第2版)

    PHP(Hypertext Preprocessor)是一种广泛应用于Web开发的服务器端脚本语言,以其开源、免费、易学、高效的特点深受程序员喜爱。本书首先会介绍PHP的基础知识,包括PHP环境的搭建、基本语法、变量与数据类型、流程...

    php专业基础教程

    8. PHP错误与异常处理:理解PHP的错误级别,学习如何使用error_reporting()控制错误报告,以及try-catch结构处理异常。 9. PHP数据库交互:通常使用PDO或mysqli扩展连接MySQL数据库,编写SQL语句进行查询、插入、...

    php本科期末复习资料.zip

    PHP以其语法简洁、学习曲线平缓、功能强大且跨平台的特性,深受程序员喜爱,尤其在本科教育阶段,是教授Web编程的重要工具。这份“php本科期末复习资料.zip”包含的资源应是帮助学生全面回顾和巩固PHP基础知识,以...

    第8章 错误、异常处理与调试1

    `ExceptionType`指的是可能捕获的异常类,可以是内置的异常类,也可以是自定义的。 【程序调试】 调试是发现并修复程序错误的过程。PHP提供了多种调试手段,如: - `error_reporting()`函数可以设置报告的错误级别...

    PHP学习资料--php

    5. **错误与异常处理**:理解PHP的错误报告机制,学会使用`error_reporting()`和`try...catch`结构来捕获和处理运行时错误。 6. **会话控制**:理解PHP会话的工作原理,使用`session_start()`启动会话,存储和检索`...

Global site tag (gtag.js) - Google Analytics