2012-02-09 67 views
1

我使用spl_autoload_register来加载某些类,当它们需要时,但是当我的自动加载方法找不到类时,如何捕获错误?如何捕捉“class not found”错误

现在,我看到的唯一解决方案是在自动加载回调中显示一条可爱的错误消息,并停止应用程序,以防止出现错误。

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

+1

相近职位[这一个](http://stackoverflow.com/questions/1579080/throwing-exceptions-in-an-spl-autoloader)。 – 2012-02-09 20:54:43

回答

8

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

+0

谢谢!它的工作原理:D我觉得很愚蠢,因为没有想过尝试这样做 – Alex 2012-02-09 21:00:00

+0

必须在每个实例化之前使用'class_exists'是一件痛苦的事情,并且无论如何使用它都会触发加载器。不妨将它用在装载机上。 – Leigh 2012-02-09 21:00:16

+0

@Leigh是的,它绝对应该在自动加载器中实现。 – kba 2012-02-09 21:12:22

2

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

下面的代码为我工作:

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

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

ewww ...'eval' :( – Leigh 2012-02-09 20:58:29

+0

聪明但危险 – Cyclone 2012-02-09 20:58:31

+0

也... ewww ..'__autoload' – Leigh 2012-02-09 21:04:05