如果可以使用if Else代码代替Everywhere,为什么要使用Exception?如果我们不在任何地方使用Exce


Why use Exception if you can use If Else code instead Everywhere? What if we dont use Exception anywhere?

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

看看我是否不想在任何地方使用exception和if Else简单条件,它可以轻松地完成我的工作,毫无疑问,那么为什么要在我的代码中的任何地方使用xception呢??

例如:异常代码

<?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条件和Exit(0)Or Return以及一些自定义消息及其代码,它仍然可以按预期工作。那么,为什么要在代码中使用异常呢?如果我不使用异常并使用带有返回自定义消息的条件代码,该怎么办??

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

Oracle的人有一篇优秀的文章,其中包含了异常的一些主要优点(这是针对Java的,但想法完全相同)。

总结:

  1. 将错误处理代码与"常规"代码分离
  2. 向上传播错误到调用堆栈
  3. 分组和区分错误类型

就我个人而言,我使用异常只是为了惯例,尤其是在大型项目中,当代码变得难以阅读时。

当然,你也可以在没有它的情况下做同样的事情(只使用if-else语句),但我喜欢它,因为它为我的代码提供了语义,将"正常或预期的行为"与"异常情况"区分开来。

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

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

如果您在询问性能开销,您真的不应该使用try/catch。try/catch是针对超出您控制范围的、不在正常程序流中的错误。如果您可以创建逻辑来处理异常,那么总是选择If/else作为其较少的处理开销。在上面的代码中,正确的方法是使用if语句而不是try/catch。引用

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

因此,处理异常总是更好的。如果您正在使用php编写一些重要的脚本或程序,我建议您处理异常。

我明白你的意思了,你本质上是在问,既然你可以很容易地对条件检查进行同样的处理,为什么还要麻烦异常处理?在上面的例子中,你是对的,我不认为有任何特殊的需要使用异常处理,但我会给你一个需要它的场景:

目标:除以两个数字

使用if-else进行基于零的除法是非常容易和有效的,但请注意,这是一种预期的错误条件,意味着您在它发生之前就已经知道了。

目标:从文件中读取数字并进行除法

现在情况已经改变了。你仍然可以使用你的除法函数,但你如何保证你试图打开的文件是可用的?还是文件所在的磁盘仍处于连接状态?或者一百万其他的东西。因此,你可以理解为什么在这种情况下使用if/else很可能会破坏你的应用程序,除非你预料到并考虑到所有这些不同的可能性。

经验法则:

仅在特殊情况下使用异常