如何在不触发错误的情况下检测类是否不存在


How to detect if a class does not exist without triggering an error

我遇到了一个有趣的问题。在DataMapper类中,我正在生成一个类名,用于从数据库返回的行。

问题是,我所有的类都是自动加载的,可以来自很多地方(库、应用程序/模型等),我想检查生成的类名是否真的存在。现在,人们会认为:

try
{
    $test = new $className();
}
catch(Exception $ex)
{
    // Class could not be loaded
}

但当然,php错误(而不是抛出异常)表示找不到类。。。帮助不大。除了重写Zend_Loader中的自动加载器来搜索所有目录,看看是否可以加载该类之外,还有什么可以实现的吗?

如果有人想知道为什么我需要这样做,而不是让"找不到类"错误出现,如果找不到该类,我想在预先确定的位置生成一个类,让我的生活在这个项目中变得轻松。

提前感谢!

Amy

附言:如果你们需要更多信息,请告诉我。

PHP的函数class_exists()有一个标志,用于在类尚未加载时触发自动加载器:

http://www.php.net/class_exists

所以你只需写

if (!class_exists($className)) {
    // generate the class here
}