我想知道有关 PHP try,catch语句的一些事情。
让我们考虑以下示例。
abstract class ExceptionA extends Exception
{}
class ExceptionB extends ExceptionA
{}
class ExceptionTest
{
public function example()
{
try {
throw new ExceptionB();
} catch ( ExceptionB $e ) {
echo 'ExceptionB was caught';
} catch ( ExceptionA $e ) {
echo 'ExceptionA was caught';
} catch ( Exception $e ) {
echo 'Exception was caught';
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有catch语句都匹配异常。其中第一个 ( ExceptionB) 是最接近的匹配。
陈述的顺序会catch影响到谁会抓住它吗?
根据手册:
当抛出异常时,该语句后面的代码将不会被执行,并且 PHP 将尝试查找第一个匹配的 catch 块。
您可以轻松确认:
ExceptionB:class ExceptionTest
{
public function example()
{
try {
throw new ExceptionB();
} catch (ExceptionB $e) {
echo 'ExceptionB was caught';
} catch (ExceptionA $e) {
echo 'ExceptionA was caught';
} catch (Exception $e) {
echo 'Exception was caught';
}
}
}
(new ExceptionTest())->example(); // Exception B was caught
Run Code Online (Sandbox Code Playgroud)
演示: https: //3v4l.org/htgEg
ExceptionA先抓后抓ExceptionB:class ExceptionTest
{
public function example()
{
try {
throw new ExceptionB();
} catch (ExceptionA $e) {
echo 'ExceptionA was caught';
} catch (ExceptionB $e) {
echo 'ExceptionB was caught';
} catch (Exception $e) {
echo 'Exception was caught';
}
}
}
(new ExceptionTest())->example(); // Exception A was caught
Run Code Online (Sandbox Code Playgroud)
演示: https: //3v4l.org/J7Xul