6,PHP异常

作者: 陈钢镚学财 | 来源:发表于2016-11-10 12:51 被阅读73次

    首先


    先说说我对php异常处理的理解:

    PHP 异常处理.png
    <?php
        function inverse($x) {
            if (!$x) {
                    throw new Exception('Division by zero.');
            }else{
                return 1/$x;
            }
        }
    
        try {
                echo inverse(5) . " ";
                echo inverse(0) . " ";
        } catch (Exception $e) {
                echo 'Caught exception: ',  $e->getMessage(), " ";
        }
    ?>
    

    从上述的代码中,可以看出,php的异常处理,都需要依靠开发者自己进行分支判断来决定是否抛出一个异常。
    (ps:我并没有从网上的资料中找到,php的异常能像java那样自动捕获并抛出。)

    问题


    1. 既然PHP的异常基于if来判断,那在if之中,抛出异常的语句完全可以换成处理异常的流程,何必要先抛出,又捕获呢?
    2. 做php开发至今,参与大大小小的项目不下十个,为什么从未遇见过要使用异常机制的?
    3. 综上所述,php所提供的异常处理,又有什么用呢?

    于是,如题,我真的不知道PHP的异常处理,有着怎样的意义,怎样的应用场景。
    然而,我一再提醒自己,一切东西的存在,都是经过市场考验的,有它存在的价值。

    既然资料找不到结果,那就看项目吧


    public function Send() {
        try {
          if(!$this->PreSend()) return false;
          return $this->PostSend();
        } catch (phpmailerException $e) {
          $this->SetError($e->getMessage());
          if ($this->exceptions) {
            throw $e;
          }
          return false;
        }
      }
    

    这是从PHPmailer里面摘出来的一段。
    其异常抛出的步骤,在PreSend,PostSend这两个方法中。
    实际上,这两个方法之中,同样可以有自己的try...catch,形成嵌套。

    那么,拿异常机制和前文所说的不抛出异常,直接处理异常的做法做一个对比吧

    • 直接处理异常,逻辑代码便只能够单独写在判断异常的分支语句中
    • 抛出异常,则可以将所有异常集中到catch处,根据错误码进行处理,而且不同的自定义异常类,也支持不同的错误码
    • 直接处理异常在进入另一个方法时,只能通过return返回一些参数,而异常处理却可以正常地抛出错误码
    • ……应该还有更多,只是我实在组织不出来了。

    结语

    异常处理在平时开发中或许用到的次数比较少,所以并没有那么深入人心。但是,一切经历市场考核的东西,一定会有其存在的价值。我应该坚定信念去学习,探索。
    对于异常处理,我始终觉得自己了解的还不够透彻。非常欢迎大牛们可以给以斧正。

    本文出自半醒的狐狸博客

    相关文章

      网友评论

        本文标题:6,PHP异常

        本文链接:https://www.haomeiwen.com/subject/xwtxpttx.html