248

In PHP can I include a directory of scripts?

i.e. Instead of:

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

is there something like:

include('classes/*');

Couldn't seem to find a good way of including a collection of about 10 sub-classes for a particular class.

4

14 に答える 14

467
foreach (glob("classes/*.php") as $filename)
{
    include $filename;
}
于 2009-03-01T11:44:39.040 に答える
49

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;
        }
    }
}
于 2009-03-01T11:47:34.493 に答える
21

これはKarstenのコードの単なる変更です

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

include_all_php("my_classes");
于 2012-03-13T21:43:26.053 に答える
10

set_include_pathを使用できます:

set_include_path('classes/');

http://php.net/manual/en/function.set-include-path.php

于 2012-03-27T10:13:29.427 に答える
1

ディレクトリとそのサブディレクトリにすべてを含める場合:

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

ファイルのインクルードにはアルファベット順が使用されることを忘れないでください。

于 2014-10-22T08:43:12.850 に答える
0

I suggest you use a readdir() function and then loop and include the files (see the 1st example on that page).

于 2009-03-01T11:42:55.003 に答える
-1

ディレクトリにファイルを含めるために function() を記述しないでください。変数のスコープが失われる可能性があり、「グローバル」を使用する必要がある場合があります。ファイルをループするだけです。

また、インクルードされたファイルに、まだインクルードされていない他のファイルで定義された他のクラスに拡張されるクラス名がある場合、問題が発生する可能性があります。ので注意してください。

于 2012-09-04T08:05:17.513 に答える