1

我对 OOP 有点陌生,我正在为自己的应用程序开发一个“框架”。我有自己的自动加载功能,如下所示.. 以及异常处理对象。我不会使用任何 3rd 方插件(至少我不这么认为)。

第一个问题:我应该在我的自动加载中处理异常,还是我只是做得过火?

第二个问题:我的 exceptionHandler 类是一个公共函数......因为它将被许多其他应用程序使用,这是对的吗?谢谢你。

谢谢..任何输入都非常感谢。

function __autoload( $class ){

    // Define filename pattern to include
    $filename = $_SERVER['DOCUMENT_ROOT'] . '/../app/core/models/' . $class . '.class.php';

    // Require class if it exists
    try {

        if ( is_readable( $filename ) ) {

            require_once ( $filename );
        }
        else {

            throw new Exception( "Class filename doesn't exist or isn't named correctly: $filename" );
        }
    }
    catch ( Exception $e ) {

        // Send to exceptionHandler Class for logging/handling.
        $err = new exceptionHandler( $e, 3 );
    }
}

4

3 回答 3

0

关于你的第一个问题:不,你不应该。

第一个原因:您应该始终能够链接多个自动加载器(请参阅 参考资料spl_autoload_register),因此如果一个自动加载器失败,第二个可能能够加载该类。因此,除非您确切知道自己在做什么,否则您的自动加载器不应抛出任何错误。

第二个原因:如果所有自动加载尝试都失败,php 无论如何都会触发错误。正确记录您的 php 错误,您无需将其记录在自动加载器中。

第三个原因:你的自动加载器将是一段将被执行很多的代码。你不想要一个 try/catch 块。

除此之外:如果自动加载exceptionHandler失败会发生什么......?

于 2013-02-24T18:38:48.863 回答
0

任何自动加载函数实际上并不意味着抛出异常,因为不清楚该异常应该出现在哪里,并且您必须将整个代码包装在 try catch 块中或定义异常处理程序。

trigger_error您应该通过甚至更好地让 PHP 告诉您在发生错误的实际行中无法加载的类是什么(因此只是忽略不存在的文件)来触发错误。

你也不应该使用__autoloadbut spl_autoload_register

于 2013-02-24T18:27:33.987 回答
0

感谢您的反馈 Jeffrey 和 Alexander。你们让我开始思考......我最终移除了我自己种植的自动装载机,以获得更简单(更快?)的方法......

在我的配置文件中,我为我的核心应用程序类以及模块类添加了包含路径:

set_include_path( get_include_path() . PATH_SEPARATOR . APPLICATION_ROOT . 'core' . DIRECTORY_SEPARATOR . PATH_SEPARATOR . APPLICATION_ROOT . 'module' . DIRECTORY_SEPARATOR );
spl_autoload_extensions( '.class.php' );
spl_autoload_register();

到目前为止它有效:)

于 2013-02-26T01:37:44.760 回答