如何包含()目录中的所有PHP文件?



Answers

以下是我在PHP 5中包含多个文件夹中很多类的方法。但只有当您有类时才能使用。

/*Directories that contain classes*/
$classesDir = array (
    ROOT_DIR.'classes/',
    ROOT_DIR.'firephp/',
    ROOT_DIR.'includes/'
);
function __autoload($class_name) {
    global $classesDir;
    foreach ($classesDir as $directory) {
        if (file_exists($directory . $class_name . '.php')) {
            require_once ($directory . $class_name . '.php');
            return;
        }
    }
}
Question

非常快速的n00b问题,在PHP中我可以包含一个脚本目录。

即而不是:

include('classes/Class1.php');
include('classes/Class2.php');

有没有像这样的东西:

include('classes/*');

似乎无法找到一种为特定类别包含约10个子类的集合的好方法。




不要写一个函数()来将文件包含在目录中。 您可能会丢失变量作用域,可能必须使用“全局”。 只是循环上的文件。

另外,当一个包含的文件有一个扩展到另一个文件中定义的另一个类的类名时,你可能会遇到困难,这个类还没有被包含。 所以,小心点。




这只是对Karsten代码的修改

function include_all_php($folder){
    foreach (glob("{$folder}/*.php") as $filename)
    {
        include $filename;
    }
}

include_all_php("my_classes");



2017年如何做到这一点:

spl_autoload_register( function ($class_name) {
    $CLASSES_DIR = __DIR__ . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR;  // or whatever your directory is
    $file = $CLASSES_DIR . $class_name . '.php';
    if( file_exists( $file ) ) include $file;  // only include if file exists, otherwise we might enter some conflicts with other pieces of code which are also using the spl_autoload_register function
} );

这里由PHP文档推荐: 自动加载类







如果你想包含所有的目录及其子目录:

$dir = "classes/";
$dh  = opendir($dir);
$dir_list = array($dir);
while (false !== ($filename = readdir($dh))) {
    if($filename!="."&&$filename!=".."&&is_dir($dir.$filename))
        array_push($dir_list, $dir.$filename."/");
}
foreach ($dir_list as $dir) {
    foreach (glob($dir."*.php") as $filename)
        require_once $filename;
}

不要忘记它会使用字母顺序来包含你的文件。




Links



Tags

php php   include