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