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();
...

问:如何在不写入目录的情况下从目录 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

我不认为glob在需要或不需要时加载所有类并包括它们是有效的或好的主意性能明智。如果你有500 different classes ???

你为什么不利用PHP自动加载看到http://php.net/manual/en/language.oop5.autoload.php只会加载你需要的类

例子

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

$system = new System();
$database = new Database();
于 2012-04-24T11:26:36.913 回答
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 回答