php单例在自动加载器类中不断调用自己两次

标签 php singleton spl

我制作了一个按预期工作的自动加载器类,但我注意到一个奇怪的行为。当我回显发现的类的结果时,这些类的结果被传递给处理 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/

相关文章:

php - 通过反射访问 SplObjectStorage 数据

php - 为什么这里使用clone关键字

php - RC4 加密 - CommonCrypto (Objective-C) 与 PHP

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等…期望参数1为资源或结果

PHP 中的 C# NetworkCredential

ios - 单例类中的 Swift REST API 调用和协议(protocol)的使用

java - 存储一组静态字符串值的最佳方法

php - 在存储过程中调用函数时出现错误

c++ - 了解单例模式中的操作重载

php - 共存 spl_autoload_register 和 composer autoload