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

如何包含()目录中的所有PHP文件?,php,include,Php,Include,在PHP中,我可以包含脚本目录吗 i、 e.而不是: include('classes/Class1.php'); include('classes/Class2.php'); 是否有类似于: include('classes/*'); 似乎找不到一个好方法来为一个特定的类包含大约10个子类的集合。我建议您使用一个函数,然后循环并包含文件(请参见该页上的第一个示例)。以下是我在PHP5中包含多个文件夹中的大量类的方法。但这只有在你有课的情况下才有效 /*Directories that co

在PHP中,我可以包含脚本目录吗

i、 e.而不是:

include('classes/Class1.php');
include('classes/Class2.php');
是否有类似于:

include('classes/*');

似乎找不到一个好方法来为一个特定的类包含大约10个子类的集合。

我建议您使用一个函数,然后循环并包含文件(请参见该页上的第一个示例)。

以下是我在PHP5中包含多个文件夹中的大量类的方法。但这只有在你有课的情况下才有效

/*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;
        }
    }
}

这只是对卡斯滕密码的修改

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

include_all_php("my_classes");

您可以使用设置包含路径

set_include_path('classes/');

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


此外,如果包含的文件的类名将扩展到另一个文件中定义的另一个类(尚未包含),则可能会遇到困难。所以,要小心。

我知道这是一篇比较老的帖子,但是。。。不要包括你的课程。。。而是使用自动加载

function __autoload($class_name) {
    require_once('classes/'.$class_name.'.class.php');
}

$user = new User();

然后,每当您调用尚未包含的新类时,如果您希望包含一组类而不必一次定义每个类,则php将自动触发“自动加载”并将其包含在内,您可以使用:

$directories = array(
            'system/',
            'system/db/',
            'system/common/'
);
foreach ($directories as $directory) {
    foreach(glob($directory . "*.php") as $class) {
        include_once $class;
    }
}
这样,您就可以在包含该类的php文件上定义该类,而不是整个
$thisclass=new thisclass()列表


至于它处理所有文件的能力如何?我不确定这可能会稍微降低速度。

如果要将所有内容包含在目录及其子目录中:

$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;
}

不要忘记,它将使用字母顺序来包含您的文件。

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文档推荐:

如果文件之间没有依赖关系,
。。。下面是一个递归函数,用于在所有子目录中包含所有php文件:

$paths = array();

function include_recursive( $path, $debug=false){
  foreach( glob( "$path/*") as $filename){        
    if( strpos( $filename, '.php') !== FALSE){ 
       # php files:
       include_once $filename;
       if( $debug) echo "<!-- included: $filename -->\n";
    } else { # dirs
       $paths[] = $filename; 
    }
  }
  # Time to process the dirs:
  for( $i=count($paths)-1; $i>0; $i--){
    $path = $paths[$i];
    unset( $paths[$i]);
    include_recursive( $path);
  }
}

include_recursive( "tree_to_include");
# or... to view debug in page source:
include_recursive( "tree_to_include", 'debug');
$path=array();
函数include\u recursive($path,$debug=false){
foreach(glob(“$path/*”)作为$filename){
如果(strpos($filename,.php')!==FALSE){
#php文件:
包括一次$filename;
如果($debug)回显“\n”;
}else{#dirs
$path[]=$filename;
}
}
#处理DIR的时间:
对于($i=count($path)-1;$i>0;$i--){
$path=$path[$i];
未设置($i]);
包括_递归($path);
}
}
包含递归(“树到包含”);
#或者。。。要在页面源中查看调试,请执行以下操作:
include_recursive(“tree_to_include”,“debug”);


我认为使用include()会有一种更干净的方式。但这很好。谢谢大家。我会用一个配置文件构建一个合适的模块系统,但那只是因为我发现这比包含所有内容要灵活得多。:-)注意,仅适用于包含当前目录中的文件。可以通过get_include_path()进行迭代,但这很快就会变得单调乏味。当需要扩展基类的类时,此方法不太好:例如,如果基类在ExtendedClass之后出现在数组中,它将无法工作@nalply
get\u include\u path()
仍然无法自动确定加载顺序(基类可能在扩展类之后加载,导致错误)您所说的“丢失变量作用域”是什么意思?如果要重用,您应该始终使用函数,或者只是为了使代码更“自文档化”。“全球范围”的问题我认为是一个转移视线的问题。任何时候使用“全局范围”您需要认真考虑重写代码以避免它。自动加载是不相关的,因为这个问题是关于将所有内容包含在一个目录中-通常这将在不同的目录中:例如在be目录中定义的DataClass和在BL目录中定义的BL.class.php。使用globals不是一个解决方案。我建议使用composer()如果您需要自动加载,而不是像这里所示的自定义自动加载解决方案。这不包括目录中不包含Classic的任何文件,也不自动包括目录中的所有php文件,只允许在使用
包含
/
要求时省略
类/
,请解释如果这些文件中的任何一个都不包含类,这将如何工作?这不会添加任何与已接受答案相关的内容。感谢您,这是出于某种原因实际工作的唯一代码。“别忘了它将使用字母顺序”错误…
条目是按照文件系统存储它们的顺序返回的。
-如果文件相互依赖,并且顺序与依赖性不匹配,则这可能不起作用。虽然在发布时这是一个可靠的答案,但从PHP7.2.0起,此方法已被弃用,不应使用。相反,请使用。此如果目的是包含类,那么这是一个更好的答案。这不包括目录中任何不包含类的文件。请对您的代码添加更多解释,特别是当这个问题已经有很多经过投票的答案时,这不会回答问题,因为只有当有人es,即创建尚未加载的类的对象。这不包括目录中任何不包含类的文件,并且只包括那些包含使用的类的文件。如果您使用的是php 5,则可能需要改用。
$paths = array();

function include_recursive( $path, $debug=false){
  foreach( glob( "$path/*") as $filename){        
    if( strpos( $filename, '.php') !== FALSE){ 
       # php files:
       include_once $filename;
       if( $debug) echo "<!-- included: $filename -->\n";
    } else { # dirs
       $paths[] = $filename; 
    }
  }
  # Time to process the dirs:
  for( $i=count($paths)-1; $i>0; $i--){
    $path = $paths[$i];
    unset( $paths[$i]);
    include_recursive( $path);
  }
}

include_recursive( "tree_to_include");
# or... to view debug in page source:
include_recursive( "tree_to_include", 'debug');
<?php
//Loading all php files into of functions/ folder 

$folder =   "./functions/"; 
$files = glob($folder."*.php"); // return array files

 foreach($files as $phpFile){   
     require_once("$phpFile"); 
}