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

Fal*_*tar 18 php oop zend-framework autoload

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

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

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

但当然,php错误(而不是抛出异常)说这个类无法找到...不是很有帮助.如果没有在Zend_Loader中重写自动加载器来搜索所有目录以查看是否可以加载类,那么还有什么可以实现这个目的吗?

对于任何想知道为什么我需要这样做而不只是让Class Not Found错误出现的人,如果找不到类,我想在预先确定的位置生成一个类,让我的生活变得轻松,因为这个项目顺其自然.

提前致谢!特里

PS如果你们需要更多信息,请告诉我.

Dan*_*oap 27

class_exists()如果不应该加载类,PHP的函数有一个标志来触发自动加载器:

http://www.php.net/class_exists

所以你只需写

if (!class_exists($className)) {
    // generate the class here
}
Run Code Online (Sandbox Code Playgroud)

  • 我还必须将第二个参数($ autoload)设置为false (3认同)