2010-06-23 3 views

ответ

2

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

3

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

Singleton

Service Locator

Factories

1

Вот пример шаблон 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 в зависимости от того, насколько сильно вы должны контролировать экземпляров.

+1

Почему бы не сделать конструктор закрытым? – mmattax

+0

частных конструкторов? Не знал, что PHP поддерживает их. ХОРОШИЙ – leepowers

1

Вы ищете модель 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(); 
 
Смежные вопросы