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

问题描述 投票:18回答:1

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

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

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

但是,当然,php错误(而不是引发异常)表示找不到该类……不是很有帮助。缺少在Zend_Loader中重写自动加载器以搜索所有目录以查看是否可以加载该类的方法,还有什么方法可以完成?

对于想知道为什么我需要这样做而不是只显示Class Not Found错误的人,如果找不到该类,我想在一个预定的位置生成一个类,以使我的生活变得轻松如这个项目进展顺利。

提前感谢!

艾米

P.S。让我知道你们是否需要更多信息。

php oop zend-framework autoload
1个回答
27
投票

PHP的函数class_exists()具有一个标志,如果尚未加载该类,则触发自动加载器:

http://www.php.net/class_exists

所以您只需写

if (!class_exists($className)) {
    // generate the class here
}
© www.soinside.com 2019 - 2024. All rights reserved.