1

プロジェクトにファイルを含むディレクトリ CLASSES があります。

../classes/class.system.php
../classes/class.database.php
...

すべてのクラスを取り出し、次のコードでメインの index.php に含めます。

// load classes
foreach (glob("classes/class.*.php") as $filename) {
    require_once $filename;
}

次に、たとえば次のようにオブジェクトを作成します (手動で書き込みます)。

$system = new System();
$database = new Database();
...

Q: ディレクトリ CLASSES 内のファイルのリストから、それらを書き込まずに各クラスのオブジェクトを自動的に生成するにはどうすればよいですか?

回答とコードをありがとうございます。

編集:

私の作業ソリューション:

// load classes
foreach (glob("classes/class.*.php") as $filename) {
    require_once $filename;
    $t = explode(".",$filename);
    $obj = strtolower($t[1]);
    $class = ucfirst($t[1]);
    ${$obj} = new $class();
}
4

3 に答える 3

2

次のようなファイルを作成しながら、典型的なパターンに従う場合

class.<classname>.php

それで

foreach (glob("classes/class.*.php") as $filename) {
    require_once $filename;
    $t = explode(".",$filename);
    ${strtolower($t[1])}= new ucfirst($t[1])(); // automatically create the object        

}
于 2012-04-24T10:28:38.080 に答える
0
// load classes and create objects
foreach (glob("classes/class.*.php") as $filename) {
    require_once $filename;
    $t = explode(".",$filename);
    $obj = strtolower($t[1]);
    $class = ucfirst($t[1]);
    // create object for every class
    ${$obj} = new $class();
}
于 2012-04-27T07:03:50.050 に答える
0

glob必要かどうかにかかわらず、すべてのクラスをロードして含めることは、効率的またはパフォーマンスの面で良い考えだとは思いません。あなたが持っている場合はどうなりますか500 different classes ???

必要なクラスのみをロードするhttp://php.net/manual/en/language.oop5.autoload.phpPHPを参照してください。

function __autoload($className) {
    require_once "classes/class." . $className . ".php";
}

$system = new System();
$database = new Database();
于 2012-04-24T11:26:36.913 に答える