我制作了一个按预期工作的自动加载器类,但我注意到一个奇怪的行为。当我回显发现的类的结果时,这些类的结果被传递给处理 spl_autoload_register()
函数的方法。我看到我有 double 。就像脚本被调用两次一样,因为它是一个单例,所以在我的例子中数据构建了 2 个数组。
我正在使用这种方法来创建我的单例
public static function init()
{
if (!isset(self::$instance))
self::$instance = new self();
return self::$instance;
}
然后我将构造函数设置为私有(private)。我已经调试了每种方法,试图查看它似乎在哪里创建了自己的克隆。
我怀疑我的类和与此相关的类被克隆到 spl_autoload_register() 函数中的某处。
如有任何帮助,我们将不胜感激。
最佳答案
让构造函数打印出一些东西。只是为了看看它是否真的被调用了不止一次。 您正在使用两个自动加载器,对吗? 我会在应用程序一开始就设置 sp_autoload_register(可能是 index.php)并注册所有需要的自动加载器。 但是先测试构造函数是否被多次调用。
//首先我会改变这个:
private static $instance = null;
//初始化函数
public static function init() {
if (self::$instance === null) {
self::$instance = new Autoload();
}
return self::$instance;
}
关于php单例在自动加载器类中不断调用自己两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296876/