Есть ли способ поместить этот PHP в массив и упростить его? - PullRequest
5 голосов
/ 18 июля 2010

Следующий код загружает все файлы .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 ]

5 голосов
/ 18 июля 2010

Более хороший способ сделать это - использовать 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;
}
4 голосов
/ 18 июля 2010

Это довольно просто.См. массивы и 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);
}
1 голос
/ 19 июля 2010

Лучшей идеей может быть отложенная загрузка через __autoload или spl_autoload_register, включая все файлы .php в каталоге, может показаться хорошей идеей сейчас, но не тогда, когда ваша кодовая база становится больше.

Ваш код должен быть изложен в простой для понимания иерархии, а не помещать их все в один каталог, чтобы их можно было легко включить. Кроме того, если вам не нужен весь код в файлах при каждом запросе, вы тратите ресурсы.

Проверьте http://php.net/manual/en/language.oop5.autoload.php для простого примера.

0 голосов
/ 19 июля 2010

Это можно сделать довольно плотно:

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

Поместите это в функцию, где $ dirs входит в качестве параметра и свободно используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...