какая точная разница между статическим классом PHP и классом синглтона - PullRequest
3 голосов
/ 17 мая 2010

Я всегда использовал класс Singleton для объекта реестра в PHP. Как и все классы Singleton, я думаю, что основной метод выглядит так:

class registry
{
    public static function singleton()
    {
        if( !isset( self::$instance ) )
        {
            self::$instance = new registry();
        }
        return self::$instance;
    }

    public function doSomething()
    {
        echo 'something';
    }
}

Поэтому, когда мне нужно что-то из класса реестра, я использую такую ​​функцию:

registry::singleton()->doSomethine();

Теперь я не понимаю, в чем разница между созданием обычной статической функции. Будет ли он создавать новый объект, если я просто использую обычный статический класс.

class registry
{
    public static function doSomething()
    {
        echo 'something';
    }
}

Теперь я могу просто использовать:

registry::doSomethine();

Может кто-нибудь объяснить мне, какова функция синглтон-класса. Я действительно этого не понимаю.

Ответы [ 2 ]

8 голосов
/ 17 мая 2010

Статическая функция - это функция, которую можно вызывать без создания объекта класса.

registry::doSomething()

Синглтон - это шаблон проектирования , который должен препятствовать пользователямкласс от создания более одного экземпляра класса.Таким образом, обычно существует только один экземпляр одноэлементного класса.Конструктор Singleton должен быть объявлен private и иметь статический метод, обеспечивающий один объект-экземпляр:

class Singleton
{
   private Singleton()
   {
   }

   private static var $instance = null;

   public static getInstance()
   {
     if(self::$instance == null)
       self::$instance = new Singleton();
     return self::$instance; 
   }
}

Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Singleton_pattern

PS: Извинитедля моего плохого PHP синтаксис может быть не на 100% правильным, но вы должны примерно понимать, что я имею в виду с точки зрения ООП.

1 голос
/ 17 мая 2010

Тот факт, что Singleton является шаблоном дизайна, который ограничивает создание экземпляров класса одним объектом, можно сделать некоторые вещи, которые немного сложнее со статическим классом:

  • Ленивая инициализация
  • Заменить реализацию внутренне, подклассифицируя Фабрику
  • Управление через конфигурацию

Однако у синглетонов есть несколько недостатков, поэтому в общем случае лучше использовать такие шаблоны, как Factory, так как вы получаете дополнительные преимущества, такие как развязка.

...