0

我有这个代码:

class MyException extends Exception {}

function __construct($palabra){
echo 'hola.adios';
}

try {
throw new MyException('Oops!');
}catch (Exception $e) {
echo "Caught Exceptionn";
}catch (MyException $e) {
echo "Caught MyExceptionn";
}

当我在资源管理器中运行它时,输出是“Caught Exceptionn”而不是“Caught MyExceptionn”,虽然是一个新的 MyException 并且我已经在这个类中构造了!!

4

2 回答 2

0

您的第一个catchblock 引用了异常,它是MyException 的父类。这意味着如果您有 catch(Exception) 它还将处理所有 MyException 和所有 Exception 类。

颠倒您的顺序以解决您的问题(即,使其从最具体到最通用):

class MyException extends Exception {}

function __construct($palabra){
echo 'hola.adios';
}

try {
throw new MyException('Oops!');
}catch (MyException $e) {
   echo "Caught MyExceptionn";
}catch (Exception $e) {
   echo "Caught Exceptionn";
}
于 2014-02-22T21:09:30.620 回答
0

您应该catch从最具体到最少链接您的块。所以基本上,它应该看起来像

class MyException extends Exception {}

function __construct($palabra){
    echo 'hola.adios';
}

try {
    throw new MyException('Oops!');
} catch (MyException $e) {
    echo "Caught MyException";
} catch (Exception $e) {
    echo "Caught Exception";
}

如果异常是 MyException 类型,它将catch在第一个catch块中编辑,如果不是,它将在更通用的Exception catch块中捕获。

于 2014-02-22T21:09:36.933 回答