Покажите на пальцах для чего нужен Singleton? class Singleton { protected static $instance // object instance /** * Защищаем от создания через new Singleton * * @return Singleton */ private function __construct() { /* ... */ } /** * Защищаем от создания через клонирование * * @return Singleton */ private function __clone() { /* ... */ } /** * Защищаем от создания через unserialize * * @return Singleton */ private function __wakeup() { /* ... */ } /** * Возвращает единственный экземпляр класса * * @return Singleton */ public static function getInstance() { if ( is_null(self::$instance) ) { self::$instance = new Singleton } return self::$instance } public function doAction() { /* ... */ } } //usage Singleton::getInstance()->doAction() Для чего писать так? Если можно написать вот так: class Singleton { public static function doAction() { /* ... */ } } Singleton::doAction() Не проще, нет? %) Только не нужно давать ссылок на википедию и т.п.
Всем спасибо! @knes, @ikoolik и @Nord001 — накинул вам по 25 очков за старание.
Ответ Синглтон нужен, чтобы точно знать, что у нас создан ОДИН объект данного класса. Классический пример - коннект к базе данных. Если куча скриптов внутри одного файла теребит БД в разных функциях, приходится заводить глобальную переменную соединения и постоянно проверять жива ли она, на случай если в данный момент идет первое подключение к БД. Синглтон же сам создает соединение, если оно еще не было установлено, либо просто возвращает готовую ссылку. Вам же требуется только вызвать его, уже ни о чем не заботясь: лишний раз базу не потревожат. Второй ваш пример плох тем, что можно насоздавать кучу объектов данного класса, которые не будут знать что происходит у остальных.