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