只加载所需的文件或所有框架?

时间:2011-08-15 02:30:48

标签: php include

我查看了stackoverflow,但我仍无法找到问题的答案。

我正在使用我的自定义框架用于网站,截至目前,我在我的索引中使用了一个包,即php加载框架使用的所有类。

但对于我的数据库对象,我使用一个小脚本来包含所有文件,因为每个表都有许多类层。 (每个表至少有4个文件)

以下是我目前用于加载它们的代码段。

// the constants are the directories to look for files
$__dirs = array(CORE_PATH,CX_SETTINGS,BASE_MODEL,MODEL,CUSTOM_MODEL,CONTROLLER,PLUG_IN,HELPER_FUNCTIONS);
$__accepted_ext = '.php';
foreach ($__dirs as $dir) {
    if ($handle = opendir($dir)) {
        // peer files first
        while (false !== ($file = readdir($handle))) {
            if ((strpos($file,$__accepted_ext) !== false)){
                require_once($dir.DS.$file);
                //echo "$dir : $file : works \n"; // debug
            }
        }
        closedir($handle);
    }
}

此方法将扫描我提供的每个目录并包含我的所有php文件。

我的问题是,这会加载我的框架的每个文件,无论我是否使用它们。所以我认为这不是处理它的最好方法,而且我可能会创造不必要的开销。

现在我读到了__autoload()函数,我认为这是我的替代方案。但这是我甚至应该担心的事情(甚至包括我不会使用的文件)?目前用于处理此问题的方法有哪些?

编辑:

注意:包含的所有文件都是类,而不是错误包含的文件。 示例:我可能会加载注释类,该类是有效的,但不会在我的所有页面中使用。所以它在某种程度上是不必要的

2 个答案:

答案 0 :(得分:2)

如果您尝试使用类定义来避免不必要的文件,spl_autoload_register()__autoload()将是最好的方法。如果注册自动加载功能,则在尝试实例化未定义的类时将自动调用它。 您可能面临的一个问题是如何使用类等子目录处理目录结构。可以轻松解决。但是,如果所有类都在同一目录中,则不会遇到任何问题。

答案 1 :(得分:0)

为什么不尝试创建目录结构或为类使用不同的结尾?比如'.cls.php'。这样可以减少开销。如果您想自动执行此操作,则只包含此文件。但据我所知,你无法避免加载未使用的类......