有没有办法将这个PHP放入一个数组并简化它?

时间:2010-07-18 13:41:16

标签: php wordpress

以下代码加载在指定文件夹中找到的所有.php文件(单独定义)。有没有办法将其放入数组中以简化代码?

只有几个变量发生了变化,但基本上代码重复了几次。

// The General Files

$the_general = opendir(FRAMEWORK_GENERAL);

while (($the_general_files = readdir($the_general)) !== false) {
    if(strpos($the_general_files,'.php')) {
        include_once(FRAMEWORK_GENERAL . $the_general_files);       
    }       
}

closedir($the_general);


// The Plugin Files

$the_plugins = opendir(FRAMEWORK_PLUGINS);

while (($the_plugins_files = readdir($the_plugins)) !== false) {
    if(strpos($the_plugins_files,'.php')) {
        include_once(FRAMEWORK_PLUGINS . $the_plugins_files);       
    }       
}

closedir($the_plugins);

还有几个部分调用不同的文件夹。

非常感谢任何帮助。

干杯, 詹姆斯

4 个答案:

答案 0 :(得分:5)

我更好的方法是使用glob()。并使其成为一个功能。

function includeAllInDirectory($directory)
{
    if (!is_dir($directory)) {
        return false;
    }

    // Make sure to add a trailing slash
    $directory = rtrim($directory, '/\\') . '/';

    foreach (glob("{$directory}*.php") as $filename) {
        require_once($directory . $filename);
    }

    return true;
}

答案 1 :(得分:4)

这很简单。请参阅arraysforeach

$dirs = array(FRAMEWORK_GENERAL, FRAMEWORK_PLUGINS, );

foreach ($dirs as $dir) {
    $d = opendir($dir);

    while (($file = readdir($d)) !== false) {
        if(strpos($file,'.php')) {
            include_once($dir . $file);       
        }       
    }

    closedir($d);
}

答案 2 :(得分:1)

更好的想法可能是通过__autoload或spl_autoload_register进行延迟加载,包括目录中的所有.php文件现在看起来都是个好主意,但是当你的代码库变大时却不行。

您的代码应该以易于理解的方式进行布局,而不是将它们全部放在一个目录中,以便可以轻松地将它们包含在内。此外,如果您在每个请求中都不需要文件中的所有代码,那么您就是在浪费资源。

查看http://php.net/manual/en/language.oop5.autoload.php以获取简单示例。

答案 3 :(得分:0)

这可以非常紧密地完成:

$dirs = array(FRAMEWORK_GENERAL, FRAMEWORK_PLUGINS);
foreach($dirs as $dir) {
    if (!is_dir($dir)) { continue; }
    foreach (glob("$dir/*.php") as $filename) {
        include($filename);
    }
}

将它放在$ dirs作为参数进入的函数中并自由使用。