oop — пример шаблона Singleton в переполнении стека

Я новичок в PHP.
Вот стандартный пример шаблона Singleton в соответствии с phptherightway.com:

<?php
class Singleton
{
public static function getInstance()
{
static $instance = null;
if (null === $instance) {
$instance = new static();
}

return $instance;
}

protected function __construct()
{
}

private function __clone()
{
}

private function __wakeup()
{
}
}

class SingletonChild extends Singleton
{
}

$obj = Singleton::getInstance();
var_dump($obj === Singleton::getInstance());             // bool(true)

$anotherObj = SingletonChild::getInstance();
var_dump($anotherObj === Singleton::getInstance());      // bool(false)

var_dump($anotherObj === SingletonChild::getInstance()); // bool(true)

Вопрос в этой строке:

        static $instance = null;
if (null === $instance) {
$instance = new static();
}

Так как я понимаю if (null === $instance) всегда ИСТИНА, потому что каждый раз, когда я вызываю метод getInstance() переменная $instance всегда устанавливается на null и новый экземпляр всегда будет создан.
Так что это на самом деле не синглтон. Не могли бы вы объяснить мне?

3

Решение

Посмотрите на «Пример # 5 Пример использования статических переменных» здесь:
http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

«Теперь $ a инициализируется только при первом вызове функции, и каждый раз, когда вызывается функция test (), она печатает значение $ a и увеличивает его».

2

Другие решения

Увидеть http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

static $instance = null;

будет запущен только при первом вызове функции

Теперь $ a инициализируется только при первом вызове функции

и все остальное время он будет хранить созданный объект

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector