Php 为什么抛出';捕获异常n';而不是';捕获MyExceptionn';虽然我有这个班的结构?
我有以下代码:Php 为什么抛出';捕获异常n';而不是';捕获MyExceptionn';虽然我有这个班的结构?,php,exception,throw,construct,Php,Exception,Throw,Construct,我有以下代码: 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"; } 当我在
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";
}
当我在资源管理器中运行它时,输出是“catch Exceptionn”,而不是“catch MyExceptionn”,尽管它是一个新的MyException,尽管我在这个类中构造了它 您的第一个catchblock引用了异常,它是MyException的父类。这意味着,如果您有catch(Exception),它还将处理所有MyException和所有异常类 颠倒顺序以解决问题(即从最具体到最一般):
您应该将
捕获
块从最具体到最不具体地进行链接。所以基本上,它应该看起来像
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
块中被捕获
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";
}