2011-06-09 26 views
16

我遇到了一个有趣的困境。在DataMapper类中,我生成一个类名,用于从数据库返回的行。如何在不触发错误的情况下检测类是否存在

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

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

(而不是抛出一个异常),当然,PHP错误称的类,但找不到...不是非常有帮助。在Zend_Loader中重写自动加载器以搜索所有目录以查看该类是否可以加载,是否有无法完成此操作?

对于任何人想知道为什么我需要这样做而不是让Class Not Found错误出现,如果找不到类,我想在预定的位置生成一个类来让我的生活这个项目一直很顺利。

在此先感谢! Terry

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

回答

26

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

http://www.php.net/class_exists

所以你只要写

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

好吧,不要觉得愚蠢现在。我看到该页面,阅读描述“已定义”并跳过参数。谢谢! – TJMonk15 2011-06-09 21:38:03

+3

我还必须将第二个参数($ autoload)设置为false – waaadim 2013-12-23 13:58:13

相关问题