Несколько экземпляров класса Singleton в PHP - PullRequest
2 голосов
/ 20 января 2012

У меня есть следующий класс Singleton в PHP.

class CounterBalance{
    private static $instance;

    private $counterBalance;

    private function __construct(){ 
        $this->counterBalance = mt_rand(1, 4);      
    }

    // Getter method for creating/returning the single instance of this class
    public final static function getInstance() {
        if(!self::$instance) {
            self::$instance = new CounterBalance();
            echo "CounterBalance constructed <br/>";
        }
        return self::$instance;
    }

    public function getCounterBalanceValue() {
        return $this->counterBalance;
    }

}

Но в классе, когда я делаю что-то вроде

CounterBalance::getInstance()->getCounterBalanceValue();

на той же странице php, она работает правильно. Но он не работает должным образом на разных страницах. Я получаю несколько экземпляров CounterBalance, когда выполняю один и тот же вызов функции на следующей странице php.

Может кто-нибудь, пожалуйста, объясните, почему это происходит.

Заранее спасибо.

1 Ответ

6 голосов
/ 20 января 2012

Добро пожаловать в мир HTTP без сохранения состояния.

Синглтон может сохраняться только при загрузке одной страницы (или любой другой структуры данных PHP, в этом отношении).Когда процесс php умирает, синглтон умирает вместе с ним.При следующей загрузке страницы синглтон создается заново.Синглтон жив только в контексте этого единственного процесса.Если бы вы попытались создать десять его экземпляров во время выполнения одного скрипта, вы бы сохранили один экземпляр.

Если вам требуется постоянство данных на страницах, вам потребуется реализовать агент состояния.Например, суперглобальные $_SESSION или $_GET или данные хранятся в базе данных (например) и повторно извлекаются при последующих загрузках страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...