PHP尝试catch块语法

时间:2014-02-10 15:49:35

标签: php

一个没有太多经验的人的一个非常简单的问题。下面的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';

2 个答案:

答案 0 :(得分:1)

你提到的是过滤器结构。它类似于其他声明性语言中已知的声明。然而,它实际上具有不同的含义。实际上,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语法中是某种中断。

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

答案 1 :(得分:0)

这是OO PHP。 $ e是异常对象的一个​​实例。

$ e很容易被标记为其他任何东西,只要在你想要获取消息等时就引用它。

例如;

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