【问题标题】:ReflectionException unable to be caught?无法捕获ReflectionException?
【发布时间】:2012-03-15 11:37:38
【问题描述】:

我有这个代码:

namespace Some\Different\Name;
        try {
            $reflect  = new ReflectionClass($class);
X:          $instance = $reflect->newInstanceArgs($args);
        } catch (ReflectionException $e) {
            exit($e->getMessage());
        }

我正在测试它以尝试抛出 ReflectionException。它给了我:

致命错误:带有消息的未捕获异常“ReflectionException” 'Class MyClass 没有构造函数,所以你不能传递任何 构造函数参数' in ... 第 X 行。

我做错了什么?

PS:我知道为什么会抛出异常,我只想知道为什么它没有被捕获!

【问题讨论】:

  • 确实很奇怪。通用的catch (Exception $e) 会抓住它吗?
  • 请添加该错误的回溯。
  • 真的很奇怪,我测试了一下,只要下面的代码,就可以了。在我在那里工作的上下文中,我确定$class 存在,并且错误表明该类没有构造函数这一事实证实了这一点。在这种情况下,$args 是一个空数组。

标签: php exception reflection


【解决方案1】:

最后。这是一个命名空间问题。奇怪的是,PHP 没有通知您正在尝试捕获当前命名空间中不存在的类型 (ReflectionException) 的异常。

只需将 \ 添加到 \ReflectionException 即可帮助我解决问题,因为现在它能够找到我真正要查找的异常类型。

另一种解决方案是添加:

use \ReflectionException;

就在命名空间声明之后。

【讨论】:

  • 有自动加载,所以 PHP 事先并不知道未来会带来哪些异常;)而且 PHP 告诉你有一个未捕获的异常,甚至将其命名...处理命名空间。发生在我们最好的人身上。
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2022-11-11
  • 2015-06-20
  • 1970-01-01
  • 2016-04-30
  • 2021-12-10
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多