Шаблон проектирования для класса, который будет создан один раз - PullRequest
1 голос
/ 23 июня 2010

Какой объектно-ориентированный шаблон проектирования вы бы использовали для реализации класса, который может быть создан только один раз (в PHP)?

Ответы [ 7 ]

3 голосов
/ 23 июня 2010

Вам действительно нужно подумать о вашей конкретной ситуации. Вот несколько шаблонов, которые следует учитывать при выборе того, что вам нужно. Зачастую Singleton может эффективно использоваться как с сервисным локатором, так и с фабрикой.

Singleton

Сервисный локатор

Фабрика

2 голосов
/ 23 июня 2010

синглтон, но я всегда, всегда дважды думаю, прежде чем использовать его

2 голосов
/ 23 июня 2010

Вы ищете Singleton .

Изучите это руководство о реализации синглтона с php (согласно вашему тегу).

2 голосов
/ 23 июня 2010
1 голос
/ 24 июня 2010

Вы ищете шаблон Singleton .


class Foo {

    private static $instance = null;

    private function __construct() { }

    public static function instance() {

        if(is_null(self::$instance))
            self::$instance = new Foo;

        return self::$instance;
    }

    public function bar() {
        ...
    }
}

$foo = Foo::instance();
$foo->bar();

1 голос
/ 23 июня 2010

Вот пример шаблона Singleton в PHP. Технически, он позволяет создавать до двух экземпляров, но вылетает в конструкторе, когда экземпляр уже существует:

<?php

class Singleton {

 static protected $_singleton = null;

 function __construct() {
  if (!is_null(self::$_singleton))
   throw new Exception("Singleton can be instantiated only once!");
  self::$_singleton= $this;  
 }

 static public function get() {
   if (is_null(self::$_singleton))
    new Singleton();
   return self::$_singleton;
 }

}

$s = new Singleton();
var_dump($s);
$s2 = Singleton::get();
var_dump($s2);  // $s and $s2 are the same instance.
$s3 = new Singleton();  // exception thrown
var_dump($s3);  

Вы также захотите взглянуть на __ clone в зависимости от того, насколько тщательно вам нужно контролировать вызовы экземпляра.

0 голосов
/ 23 июня 2010

Умммм .... синглтон

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