我使用了大量的包含文件,包括我與的函數,類ECT集合191個文件。PHP:函的包括
用於我的問題是我真的不喜歡編輯包含文件的獲取一團糟有時我只是忘了包括事。
所以我想知道,有沒有包括文件夾中的所有PHP文件,甚至更好的自己的文件夾+所有子文件夾中包括PHP函數或自己製作庫。
這些東西讓生活更easyer和靈活。
我使用了大量的包含文件,包括我與的函數,類ECT集合191個文件。PHP:函的包括
用於我的問題是我真的不喜歡編輯包含文件的獲取一團糟有時我只是忘了包括事。
所以我想知道,有沒有包括文件夾中的所有PHP文件,甚至更好的自己的文件夾+所有子文件夾中包括PHP函數或自己製作庫。
這些東西讓生活更easyer和靈活。
您可以使用下面的功能我剛剛創建:
function load_folder($folder, $ext = '.php') {
foreach (glob("$folder*$ext") as $file) {
if (file_exists($file)) {
require_once($file);
}
}
}
START EDIT
這是相同的功能的新版本。現在它允許您指定文件夾爲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); }
}
}
}
}
編輯完
您還可以,如果你願意,你可以執行一個文件夾中加載例如,僅.txt
文件指定一個特定的擴展是這樣的:load_folder('folder/', '.txt');
。請記住,有人認爲這在某種程度上是不安全的。在商業網站中使用此功能之前,請先查看關於該主題的更多意見。 還要注意的是,如果某些文件是關於類,您可以使用PHP __autoload()
本地函數讓PHP調用它真正需要的類(延遲加載)。
參考文獻:
如果你有類名和文件之間的標準,你可以使用__autoload()
功能。它會爲你節省很多費用。
你可能只是有一個「元包括」文件,其中有個別包括語句,然後你只在您的腳本一個單一的文件。
當然,自動加載版本在這裏其他的答案會更有效。雖然PHP在加載/解析時速度非常快,但爲每個請求加載的191個單獨文件加起來非常快。
我通常需要作爲第一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);
...
時不包括對類文件:創建一個包含所有包含一個單一的文件,包括該文件。否則使用'__autoload()' – knittl 2011-04-18 16:41:13