[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Singleton (Одиночка)
Страницы: 1, 2
vital
6.3 Singleton (Одиночка)

Паттерн служит для создания объекта, который нужен во всей программе _строго_ в одном экземпляре.
Для того что бы этого добиться - нужно быть уверенным, что создать второй обьект требуемого класса просто невозможно - оператор new не сработает. Что бы этого добиться конструктор класса делают приватным.
private __construct(). После чего класс создать обычным путем невозможно.
А создается он так

Class MySingleton
{
static private $instance=null;

private function __construct(){} //Делаем нерабочей операцию new
private function __invoke(){} //защищаемся вот вызова как функции
private function __wakeUp(){} // что бы не очистили, если что
private function __sleep(){}
private function __clone(){} //что бы не клонировали

static public function getInstance()
{
if (is_null(self::$instance))
self::$instance = New MySingleton();

return self::$instance;
}

public function hello()
{
echo 'Hello world';
}

}


UML:
user posted image

Здесь видно, что мы создаем статическую переменную внутри класса, в которой и храним экземпляр класса - самого себя. Доступ к которому можно получить при помощи такой же статической функии.
Есть два способа использования этого:

$class=MySingleton::getInstance();
$class->hello();

MySingleton::getInstance()->hello();


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.