如果您可以使用If Else代码而不是Everywhere,为什么要使用Exception?如果我们不在任何地方使用Exception怎么办?

时间:2015-12-05 08:14:17

标签: php exception exception-handling divide-by-zero

为什么使用Exception,如果你可以使用If Else代码到处?如果我们不在任何地方使用Exception怎么办?

看看我是否不想使用异常并在任何地方使用If Else简单条件,它可以轻松完成我的工作,毫无疑问,为什么在我的代码中的任何地方使用异常?

例如:代码

<?php
function division($num1, $num2){
    //If num == 0 , throw exc
    if(!$num1){
        throw new Exception("Hell no !! This is Divide by 0 Exception");
    }
    return $num2/$num1;
}
try{
   echo "Division result is : ".division(0,22);
}catch (Exception $e){
    echo 'Exception msg : '.$e->getMessage();
}

但是如果我不想使用try catch等跟踪异常处理方式。

无例外

function division($num1, $num2){
    $arr = array('error' => 0,'msg'=>'');
    //If num == 0 , throw exc
    if(!$num1){
        $arr['error'] = 1;
        $arr['msg'] = 'div by 0';
    }
    return $arr['result'] = $num2/$num1;
}

$res = division(0,22);
if($res['error']) {
    echo "errr div by 0";
}else{
    echo $res['result'];
}

如果我们只是使用If Else条件并退出(0)或返回一些自定义消息及其代码,它仍将按预期工作。那么为什么要在代码中使用异常?如果我不使用异常并使用带有返回自定义消息的条件代码??

,该怎么办?

4 个答案:

答案 0 :(得分:3)

使用例外(不仅在PHP中,而且在所有语言中都有例外管理)不是强制性的,但强烈建议使用。

甲骨文家伙在一些主要advantages of exceptions上有一篇优秀的帖子(它适用于Java,但是完全相同)。

总结:

  1. 将错误处理代码与&#34;常规&#34;分开代码
  2. 在调用堆栈中传播错误
  3. 分组和区分错误类型
  4. 就个人而言,我只是为了惯例使用异常,特别是在代码难以阅读的大型项目中。

    当然你可以在没有它的情况下做同样的事情(仅使用if-else语句)但我喜欢它,因为它为我的代码提供了语义,分离了正常或预期的行为&#34;来自&#34;例外情况&#34;。

    此外,当你有太多条件要检查时,如果你使用if-else,你也会有太多的嵌套级别,这使得它难以阅读和理解。

    在您的具体示例中,如果我只想检查除以0,并且没有其他程序员将使用我的函数,可能我会使用if-else。但如果我在公司,我肯定会使用例外。

答案 1 :(得分:0)

如果你问的是性能开销,你真的不应该使用try / catch。 try / catch适用于你控制之外的错误,而不是正常的程序流程。如果你可以创建逻辑来处理异常,那么总是将if / else作为其较少的处理开销。 在上面的代码中,正确的方法是使用if语句而不是try / catch。 Cited

答案 2 :(得分:0)

如果出现运行时异常,则需要对其进行处理,以便在发生错误时程序或应用程序不会停止运行。 如果您不处理它,应用程序/程序将抛出错误并停止运行。如果您是创建和分发高级软件的开发人员,则不希望发生这种情况。 如果发生这样的事情,人们或普通用户会将其视为软件中的错误并继续推进以获得更好的软件。

所以处理异常总是更好。如果你使用php编写一些重要的脚本或程序,我建议你处理异常。

答案 3 :(得分:0)

我明白你的意思,你基本上在问你为什么要在有条件检查的情况下轻松做同样的事情而烦恼?在上面的例子中你是对的,我没有看到任何使用异常处理的特殊需要,但我会给你一个需要它的场景:

目标:划分两个数字

如果基于零的除法使用它是非常容易和有效的,但请注意,这是一个预期的错误条件,这意味着你甚至在它发生之前就已经知道了它。

目标:从文件中读取数字并将其分开

现在情况发生了变化。您仍然可以使用除法功能但是如何保证您尝试打开的文件可用?或文件所在的磁盘仍然连接?或者其他一百万件事。因此,你可以看到为什么在这种情况下使用if / else很可能会破坏你的应用程序,除非你预见并考虑到所有这些不同的可能性。

根据经验:

仅在例外情况下使用例外