2010-07-18 43 views
5

以下代码加载指定文件夹(单独定义)中找到的所有.php文件。有没有办法将它放入数组来简化代码?有没有办法将这个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

这是相当简单的。请参阅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); 
} 
+0

理论上你可以有一个名为'something.php.jpg'的文件,所以使用'substr($ file,-4)'可能会比'strpos(...)'更好。 – phidah 2010-07-18 14:42:05

+3

在这种情况下,最好使用'pathinfo($ file,PATHINFO_EXTENSION)'。 – Znarkus 2010-07-18 15:24:51

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

更好的方法可能是通过__autoload或spl_autoload_register延迟加载,包括在一个目录下的所有.php文件似乎是个好主意,现在,而不是在你的代码库变大。

你的代码应该放在易于理解的层次上,而不是将它们全部放在一个目录中,以便可以轻松包含它们。此外,如果您不需要每次请求中的文件中的所有代码,则会浪费资源。

检查http://php.net/manual/en/language.oop5.autoload.php为一个简单的例子。

+0

我正在建议自动加载,但海报可能包含代码段而不是类。 – 2010-07-19 03:17:29

+0

指定文件夹中的所有文件都是需要加载的WordPress函数。他们有行为来决定他们应该被调用的顺序。 – 2010-07-19 08:12:28

+0

@詹姆斯:你说得对,有代码段而不是类。 – 2010-07-19 08:13:19

0

这可以非常紧密地做到:

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

将在其中$迪尔斯进来作为PARAM自由地使用功能。

+0

钉在头上,这正是我所寻找的。 非常感谢。 – 2010-07-19 08:10:45

相关问题