php / Шаблон проектирования Singleton
<?php
class Example
{
// Содержит экземпляр класса
private static $instance;
// Закрытый конструктор; предотвращает прямой доступ к
// созданию объекта
private function __construct()
{
echo 'Я конструктор';
}
// Метод синглтон
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Метод для примера
public function bark()
{
echo 'Гав!';
}
// Предотвращает клонирование экземпляра класса
public function __clone()
{
trigger_error('Клонирование запрещено.', E_USER_ERROR);
}
}
?>
// Пример работы
// Позволяет вернуть единственный экземпляр класса Example
<?php
// Такой вариант завершится неудачей, так как конструктор
// объявлен как private
$test = new Example;
// Это всегда возвращает единственный экземпляр класса
$test = Example::singleton();
$test->bark();
// Это вызовет ошибку E_USER_ERROR.
$test_clone = clone $test;
?>
Хрестоматийный пример шаблона проектирования Singleton на php5.
Взято с http://www.php.net/manual/ru/language.oop5.patterns.php
2009-01-11 10:58:32


