PHP 尝试,捕获优先级和继承

标签 php

我想知道一些关于 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';
        }
    }
}

全部 catch语句匹配异常。其中第一个 ( ExceptionB ) 是最接近的匹配项。

请问catch的顺序哪些言论会受到影响呢?

最佳答案

the manual :

When an exception is thrown, code following the statement will not be executed, and PHP will attempt to find the first matching catch block.



您可以轻松确认:

捕捉 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

演示: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

演示:https://3v4l.org/J7Xul

关于PHP 尝试,捕获优先级和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59686240/

相关文章:

PHP 表单弹出确认请求

php - 在 Php 中执行 linux echo 命令 (.sh)

php - 如何从Mysql获取两个特定日期之间的数据

PHP Force 下载包括 HTML 源代码

php - 使用 Codeigniter 获取 PUT 请求

PHP - 使用 foreach 获取第一个元素

php - 使用 PDO/PHP 注册不起作用

php - 在搜索页面功能的 while 循环中继续语句

php - 用 php、html 制作 Facebook 相册幻灯片? jquery?

php - 将 int 与 string 进行比较会导致 php 出现奇怪的结果?