php singleton在自动加载器类中继续调用自己两次

时间:2012-02-15 16:09:21

标签: php singleton spl

我制作了一个按预期工作的自动加载器类,但我发现了一个奇怪的行为。当我回显出发现的类的结果时,这些结果被传递给处理spl_autoload_register()函数的方法。我看到我有双打。就像脚本被调用两次一样,并且因为它是一个单例,数据在我的情况下构建了2个数组。

我正在使用此方法创建我的单身人士

public static function init()
{
    if (!isset(self::$instance))
        self::$instance = new self();

    return self::$instance;
}

然后我将构造函数设置为private。我已经通过每个方法进行调试,试图看看它在哪里创建自己的克隆。

我怀疑我的类和类正在cl_autoload_register()函数中的某处克隆。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

让构造函数打印出来。只是为了看它是否真的被多次调用。 你正在使用两个自动加载器吗? 我会在应用程序的最开始设置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;
}