Я использую много файлов include для включения моих 191 файлов с набором функций, классов ect.
Проблема для меня в том, что мне очень не нравится редактирование включенных файлов, и это вызывает большой беспорядок, и когда-то я просто забываю что-то включить.
Поэтому мне было интересно, есть ли функция включения php или собственной библиотеки, которая включает в себя все файлы php в папке или даже лучше в своей собственной папке + все ее подпапки.
Эти вещи делают жизнь намного проще и гибко.
Вы можете использовать следующую функцию, которую я только что создал:
function load_folder($folder, $ext = '.php') { foreach (glob("$folder*$ext") as $file) { if (file_exists($file)) { require_once($file); } } }
НАЧАТЬ РЕДАКТОР
Это новая версия той же функции. Теперь он позволяет вам указывать папки как folder
или folder/
без сбоев. Также теперь он загружает все файлы во все папки и подпапки.
function load_folder($dir, $ext = '.php') { if (substr($dir, -1) != '/') { $dir = "$dir/"; } if($dh = opendir($dir)) { $files = array(); $inner_files = array(); while($file = readdir($dh)) { if($file != "." and $file != ".." and $file[0] != '.') { if(is_dir($dir . $file)) { $inner_files = load_folder($dir . $file); if(is_array($inner_files)) $files = array_merge($files, $inner_files); } else { array_push($files, $dir . $file); } } } closedir($dh); foreach ($files as $file) { if (is_file($file) and file_exists($file)) { $lenght = strlen($ext); if (substr($file, -$lenght) == $ext) { require_once($file); } } } } }
END EDIT
Вы также можете указать конкретное расширение, если хотите загрузить, например, только файлы .txt
в папке, которую вы можете выполнить, следующим образом: load_folder('folder/', '.txt');
, Помните, что кто-то думает, что это как-то небезопасно. Прежде чем использовать эту функцию внутри бизнес-сайта, найдите больше мнения о теме. Также обратите внимание, что если некоторые из ваших файлов относятся к классам, вы можете использовать встроенную функцию PHP __autoload()
чтобы PHP вызывал класс, где он действительно нужен (ленивая загрузка).
Рекомендации:
Если у вас есть стандарт между именами классов и файлами, вы можете использовать __autoload()
. Это сэкономит вам много всего.
У вас может быть только файл «meta-include» с отдельными операторами include, а затем вы включаете только один файл в свои скрипты.
Конечно, варианты автозагрузки в других ответах здесь будут более эффективными. В то время как PHP довольно быстро загружает / разбирает, 191 отдельные файлы для загрузки для каждого запроса будут складываться довольно быстро.
Обычно я требую как first application_top.php с этим:
... function requireAll($folder){ // open the folder $libs = opendir($folder); // loop inside to include each file, excluding windows default 'meta-link' . and .. while ($lib = readdir($libs)) { if ($lib != "." && $lib != "..") // require_once to be sure to require only one time require_once $folder . $lib; } // close the dir for cleaning stuff closedir($libs); } //Require all helpers requireAll(DIR_HELPERS); //Require all model classes requireAll(DIR_MODEL); //Require all mappers requireAll(DIR_MAPPERS); ...