关于php异常的问题,到底有什么好处

异常就是try中代码如果有问题就执行对应catch中的代码,问题来了,php的异常是不是必须手动捕获,是不是必须用if判断的形式抛出异常,如果是那样为什么不用if判断之后... 异常就是try中代码如果有问题就执行对应catch中的代码,
问题来了,php的异常是不是必须手动捕获,是不是必须用if判断的形式抛出异常,
如果是那样为什么不用if判断之后,在if代码块中直接执行出错后的操作,有的人会说,异常处理会显示错误信息,但是那些错误信息很重要吗,放到try中的代码就应该知道它会出什么样的问题才对呀
展开
 我来答
nbyh2012
推荐于2017-11-25 · TA获得超过3278个赞
知道小有建树答主
回答量:483
采纳率:100%
帮助的人:803万
展开全部

  在java、python等语言中,异常对于我们来说已经是必不可少的错误处理方式。异常处理是面向对象编程中的一种很强大的特性,然而很多PHPer对它不了解,甚至认为它会破坏代码结构。即使在很多开源项目中,也难以见到异常的踪影。那么,PHP中的异常,到底有没有意义呢?


  PHP有两种错误处理机制,一种是内置错误,一种是异常。


  内置错误,包含error、warning、notice等错误类型。很多PHP的内置函数,和一些PHP扩展,都会使用这种类型的错误。此类错误的优势是处理起来比较方便。不重要的错误,可以通过配置php选项来忽略它。我们甚至可以通过set_error_handler()函数,来集中处理非致命的错误。但是,PHP的宽容往往会让程序员养成一个坏习惯,那就是在代码中留下大量warning、notice级别的错误。这样对程序的调试和后期维护带来很多不便。而且致命的错误(Fatal Error),是没有办法处理的。这也是PHP的一大硬伤。


  在PHP中使用异常有以下优势:


  一、异常能提高程序的健壮性。

  在需要处理错误的场景,异常能让我们轻松掌控程序,采取相应的处理措施。并不是所有的异常都需要处理。在一些异常发生时,没有其他替代方案,这时我们可以记录一些错误日志,并让程序崩溃。在web应用里,我们可以给用户显示一个500错误页面来增强用户体验。一些PHP的开源库会提供大量的异常类型,这样会帮助我们快速找出代码错误,减少程序BUG。


  二、异常处理能增强程序的可维护性。

  函数应该有一系列的输入,并且有唯一的输出。在参数不正确、或者发生系统错误时,我们需要告知使用者发生了什么样的错误,便于使用者处理和记录。


  利用返回值、引用变量来返回错误在PHP程序中很常见:

function foo($var) {
    if (!is_int($var)) {
        return array(-1, '参数1必须是整数');
    }
    if ($var <= 0) {
        return array(-2, '参数1必须大于0');
    }
    return $var;
}

  这样的函数使用非常不方便。使用者需要通过判断函数的返回值,来确保程序是否正常运行。额外的逻辑判断,会降低程序的可读性。


  假如函数被修改为这样:

function foo($var) {
    if (!is_int($var)) {
        return array(-1, '参数1必须是整数');
    }
    if ($var <= 0) {
        return array(-2, '参数1必须大于0');
    }
    return array($var, '');
}

  这时你外层的判断逻辑就需要修改,是不是很麻烦?


  使用异常,在执行失败时抛出异常,可以让函数的输出非常干净,避免额外的处理。减少了代码量,也增强了程序的可维护性。


  三、使用异常有助于我们集中处理错误。

  在程序抛出异常时,只要没有遇到try catch,异常会逐渐向函数调用堆栈顶层传递。这样我们不需要每一层都处理错误。我们可以在程序的入口处集中处理所有未处理的异常,有助于我们发现潜在的程序BUG。而一个只会返回正常处理结果和错误代码的函数,在其出错时不得不立即处理。如果我们想在代码顶层再处理这个错误,就不得不一层一层返回这个错误,给程序设计带来很多不便。


  综上,我们应该尽量使用异常,保证程序的可靠性。

余香看电影
2013-07-29 · TA获得超过201个赞
知道小有建树答主
回答量:183
采纳率:100%
帮助的人:93万
展开全部
我记得这样一句话:你觉得哪段代码会出问题,你就直接try一下。
那你觉得是if方便还是try方便。
更何况这是php5的底层语言,看看它的功能
涉及到Exception异常类
结构:
<?php
class Exception
{
protected $message = 'Unknown exception'; // 异常信息
protected $code = 0; // 用户自定义异常代码
protected $file; // 发生异常的文件名
protected $line; // 发生异常的代码行号

function __construct($message = null, $code = 0);

final function getMessage(); // 返回异常信息
final function getCode(); // 返回异常代码
final function getFile(); // 返回发生异常的文件名
final function getLine(); // 返回发生异常的代码行号
final function getTrace(); // backtrace() 数组
final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息

/* 可重载的方法 */
function __toString(); // 可输出的字符串
}
?>
追问
我就是觉得用异常处理,会多打好多代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
342097224
2013-07-29 · TA获得超过116个赞
知道答主
回答量:252
采纳率:0%
帮助的人:110万
展开全部
举个例子、、做个除法程序 、、输入两个参数当除数为0时就是出错、、如:10/0,程序就是出错、并且中断执行、、用try捕获后、可以做出相应的处理、
如:
try

{
i=10/0;

}
catch
(e){
printf("fds")//

}
追问
您这是java代码,有点区别的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
艾护阳气
2015-09-23 · TA获得超过486个赞
知道小有建树答主
回答量:1016
采纳率:28%
帮助的人:76万
展开全部
你是说开启php报错功能吗?开启的话更有利于我们程序员开发和调试程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式