【问题标题】:How to detect if a class does not exist without triggering an error如何在不触发错误的情况下检测类是否不存在
【发布时间】:2011-06-09 21:24:24
【问题描述】:

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

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

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

当然,php 错误(而不是抛出异常)说找不到类...不是很有帮助。除了重写 Zend_Loader 中的自动加载器来搜索所有目录以查看类是否可以加载,有没有办法做到这一点?

对于任何想知道为什么我需要这样做而不是让 Class Not Found 错误出现的人,如果找不到该类,我想在预定位置生成一个类以使我的生活更轻松随着这个项目的进行。

提前致谢!

艾米

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

【问题讨论】:

    标签: php oop zend-framework autoload


    【解决方案1】:

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

    http://www.php.net/class_exists

    所以你只需写

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

    【讨论】:

    • 好吧,我现在不觉得自己很愚蠢。我看到了那个页面,阅读了“已定义”的描述并跳过了参数。谢谢!
    • 我还必须将第二个参数 ($autoload) 设置为 false
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多