Я новичок в 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
и новый экземпляр всегда будет создан.
Так что это на самом деле не синглтон. Не могли бы вы объяснить мне?
Посмотрите на «Пример # 5 Пример использования статических переменных» здесь:
http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static
«Теперь $ a инициализируется только при первом вызове функции, и каждый раз, когда вызывается функция test (), она печатает значение $ a и увеличивает его».
Увидеть http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static
static $instance = null;
будет запущен только при первом вызове функции
Теперь $ a инициализируется только при первом вызове функции
и все остальное время он будет хранить созданный объект