Следующий код загружает все .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);
Существует еще несколько разделов, которые называют различные папки.
Любая справка значительно ценится.
С наилучшими пожеланиями, James
Это довольно просто. См. массивы и foreach .
$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);
}
Я бы лучше сделал это с помощью 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;
}
Лучшей идеей может быть отложенная загрузка через __autoload или spl_autoload_register, включая все файлы .php в каталоге, может показаться хорошей идеей сейчас, но не тогда, когда ваша кодовая база станет больше.
Ваш код должен быть построен в виде простой для понимания иерархии, а не помещать их все в один каталог, чтобы их можно было легко включить. Кроме того, если вам не нужен весь код в файлах в каждом запросе, вы тратите ресурсы.
Просмотрите http://php.net/manual/en/language.oop5.autoload.php , чтобы увидеть простой пример.
Это можно сделать довольно плотно:
$dirs = array(FRAMEWORK_GENERAL, FRAMEWORK_PLUGINS);
foreach($dirs as $dir) {
if (!is_dir($dir)) { continue; }
foreach (glob("$dir/*.php") as $filename) {
include($filename);
}
}
Поместите это в функцию, где $ dirs входит в качестве параметра, и используйте ее свободно.