php singleton在autoloader类中不断调用自己两次

php singleton在autoloader类中不断调用自己两次,php,singleton,spl,Php,Singleton,Spl,我制作了一个自动加载器类,它可以按预期工作,但我注意到一个奇怪的行为。当我回显找到的类的结果时,这些类被传递给处理spl\u autoload\u register()函数的方法。我看到我有双打。比如,如果脚本被调用两次,并且因为它是一个单例,所以在我的例子中,数据构建了两个数组 我正在使用此方法创建我的单例 public static function init() { if (!isset(self::$instance)) self::$instance = new

我制作了一个自动加载器类,它可以按预期工作,但我注意到一个奇怪的行为。当我回显找到的类的结果时,这些类被传递给处理
spl\u autoload\u register()函数的方法。我看到我有双打。比如,如果脚本被调用两次,并且因为它是一个单例,所以在我的例子中,数据构建了两个数组

我正在使用此方法创建我的单例

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;
//init函数

public static function init() {
   if (self::$instance === null) {
     self::$instance = new Autoload();
   }

   return self::$instance;
}

您是否相应地设置了uuu克隆函数?您能发布完整的类代码吗?好的,发布。如果我以非单例实例的形式运行它,那么它就不会克隆自身。我设置了一个计数器,并让它在每次调用该类时运行。果然我得到了+1。你想让我把spl_自动加载_寄存器放在哪里?我已经在index.php中调用过这个脚本一次了。我用我更新的代码更新了我的帖子,但我不确定寄存器方法中是否有这个问题:spl_autoload_register(array('Autoloader','loadClass');嗯,在我使用单例程序之前,我最初将它设置为
spl\u auto\u register('self::autoload()')
。这样做:私有函数uu构造(){print“hello autoload world”;}这应该只出现一次。如果这个问题只在单身汉工作时出现。