我的项目中有文件目录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();
}
答案 0 :(得分: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
}
答案 1 :(得分: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();
答案 2 :(得分: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();
}