繁体   English   中英

PHP try catch块语法

[英]PHP try catch block syntax

一个没有太多经验的人提出的一个非常简单的问题。 以下try catch块包含“(Exception $ e)”部分:这类似于sql,其中$ e成为Exception的别名? 如果是这样,这种别名分配类型是否在php的其他地方使用,因为我还没有遇到过? 我已经搜索了几个小时,但无法在网上找到解释。

function inverse($x) {
 if (!$x) {
     throw new Exception('Division by zero.');
          }
            else return 1/$x;
          }

      try {
            echo inverse(5) . "<br/>";
            echo inverse(0) . "<br/>";
          } catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "<br/>";
          }

            echo 'Hello World';

您提到的是过滤器构造。 它类似于其他声明性语言中的声明。 但是实际上它具有不同的含义。 实际上,php没有显式声明的概念(这很可惜...)。

看一下这个例子:

function my_func($x) {
    try {
        /* do something */
        if (1===$x)
            throw new SpecialException('x is 1.');
        else if (is_numeric($x))  }
            throw new SpecialException('x is numeric.');
        else return $x;
    }
    catch (SpecialException $e) {
        echo "This is a special exception!";
        /* do something with object $e of type SpecialException */
    }
    catch (Exception $e) {
        echo "This is a normal exception!";
        /* do something with object $e of type SpecialException */
    }
}

在这里可以清楚知道构造的用途:它按异常类型过滤掉。 因此,可以将执行几个catch块中的哪个问题的问题归结为引发的异常类型。 在需要时,这允许非常精细的异常处理。 没有这种功能,只有一个catch块是合法的,并且您必须对每个catch块中的潜在异常类型实施条件测试。 该功能使代码更具可读性,尽管它在php语法中有所突破。

您不必这样做,但是您可以创建自己的具有特殊行为的异常类,更重要的是,可以接受并携带有关实际情况的更多信息。

是OO PHP。 $ e是异常对象的实例。

$ e可以很容易地被标记为其他任何东西,只要您要获取消息等在它上面被引用即可。

例如;

 try {
        echo inverse(5) . "<br/>";
        echo inverse(0) . "<br/>";
      } catch (Exception $oops) {
        echo 'Caught exception: ',  $oops->getMessage(), "<br/>";
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM