这可能会有点复杂,所以我试着以最简单的方式解释它
考虑source.php
,其中包含一段代码,这些代码可能需要也可能不需要class1.php
,class2.php
等中定义的某些类。
source.php - 典型的自动加载
// Simple autoloader, nothing fancy
spl_autoload_register(function ($class) {
$requested_file = strtolower($class) . '.php';
if (file_exists($requested_class)) {
require_once($requested_class);
} else {
throw new Exception("Unable to load $class.");
}
});
...
$class1 = new Class1();
class1->doSomething();
...
$class8 = new Class8();
class8->doSomethingElse();
基本上我想省略对象实例化并立即使用对象:
source.php - 我想要实现的目标
spl_autoload_register(function ($class) {
...
});
...
$class1->doSomething();
...
$class8->doSomethingElse();
你为什么这么问?好吧,我几个月前使用Singleton模式编写了一个自定义CMS,我将所有类定义为Static并使用它们:
source.php - 我现在所做的
spl_autoload_register(function ($class) {
...
});
...
Class1::doSomething();
...
Class8::doSomethingElse();
想想100多个源文件和类文件,我会在有人在评论部分指出它们之前回答一些评论。
source1.php
都包含在source2.php
中,并且都使用相同的类。如何在使用该类的实例时动态自动加载一个类,这意味着只包含所请求的类而不是盲目地将它们全部包含在内?
答案 0 :(得分:0)
您在PHP中无法描述的方式,即使可能也不建议使用。
相反,我建议采用更传统的单身人士模式 在你的班上:class Class8 {
private $_instance = null;
public static getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new Class8();
}
return self::$_instance;
}
// rest of class here, with no static
}
然后,您可以随时拨打Class8::getInstance()
,并且每次调用时都会获得相同的课程实例。