【问题标题】:How to catch "class not found" error如何捕获“找不到类”错误
【发布时间】:2012-03-02 09:01:41
【问题描述】:

我正在使用spl_autoload_register 在需要时加载某些类,但是当我的自动加载方法找不到该类时,我该如何捕捉错误?

目前我看到的唯一解决方案是在我的自动加载回调中显示一条可爱的错误消息并停止应用程序,这样错误就永远不会出现。

但我不想停止应用程序。我想继续并跳过我需要的缺失类的实例化(在我的特定情况下,应用程序继续运行并不严格要求它们)

【问题讨论】:

标签: php autoload


【解决方案1】:

在加载之前使用class_exists() 并适当地处理结果。如果存在,则照常实例化。如果没有,请跳过实例化。

【讨论】:

  • 谢谢!它有效 :D 我觉得自己很愚蠢,没想到尝试这样做
  • 在每次实例化之前都必须使用class_exists 是一件很痛苦的事情,而且无论如何使用它都会触发加载程序。还不如在加载器中使用它。
  • @Leigh 是的,它肯定应该在自动加载器中实现。
  • @KristianAntonsen:您的“加载前”让我感到困惑,如果您在自动加载器中执行class_exists,在加载(文件?)之前,就会出现无限循环(或者我们在某处达到最大递归深度 -不确定)?
【解决方案2】:

为了消除错误,您可以在调用它们时动态创建缺少的类,尽管我不推荐这种方法。

以下代码对我有用:

function __autoload($name) {
eval("class {$name} {}");
}

echo 'pass 1';
$a = new a();
echo 'pass 2';

【讨论】:

  • ewww... __autoload 尤其是当 OP 使用 spl_register_autoload 时
猜你喜欢
  • 2020-10-02
  • 2020-11-10
  • 2021-12-03
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多