<?php
class Example
{
private static $instance;
private $count = 0;
private function __construct()
{
}
public static function singleton()
{
if (!isset(self::$instance)) {
echo 'Создание нового экземпляра.';
$className = __CLASS__;
self::$instance = new $className;
}
return self::$instance;
}
public function increment()
{
return $this->count++;
}
public function __clone()
{
trigger_error('Клонирование запрещено.', E_USER_ERROR);
}
public function __wakeup()
{
trigger_error('Десериализация запрещена.', E_USER_ERROR);
}
?>
Пример ниже иллюстрирует использование Синглтона
<?php
$singleton = Example::singleton(); // выведет "Создание нового экземпляра."
echo $singleton->increment(); // 0
echo $singleton->increment(); // 1
$singleton = Example::singleton(); // вернет тот же самый экземпляр
echo $singleton->increment(); // 2
echo $singleton->increment(); // 3
// все строки ниже вызывают неисправимую ошибку
$singleton2 = new Example;
$singleton3 = clone $singleton;
$singleton4 = unserialize(serialize($singleton));
?>