php singleton продолжает вызывать себя дважды в классе автозагрузчика - PullRequest
5 голосов
/ 15 февраля 2012

Я создал класс автозагрузчика, который работает, как задумано, но заметил странное поведение. Когда я повторяю результаты найденных классов, которые передаются методу, который обрабатывает функцию spl_autoload_register(). Я вижу, что у меня есть двойники. Например, если скрипт вызывается дважды, и, поскольку он является единичным, в моем случае данные строят 2 массива.

Я использую этот метод для создания моего синглтона

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

    return self::$instance;
}

У меня тогда конструктор установлен в приват. Я прошел через каждый метод отладки, пытаясь увидеть, где он создает свой клон.

Я подозреваю, что мои классы и класс по этому вопросу клонируются где-то в функции spl_autoload_register ().

любая помощь будет оценена.

1 Ответ

3 голосов
/ 15 февраля 2012

Позвольте конструктору распечатать что-нибудь. Просто чтобы увидеть, действительно ли его называют не раз. Вы используете два автозагрузчика, верно? Я бы настроил 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;
}
...