Паттерн служит для создания объекта, который нужен во всей программе _строго_ в одном экземпляре.
Для того что бы этого добиться - нужно быть уверенным, что создать второй обьект требуемого класса просто невозможно - оператор 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:
Здесь видно, что мы создаем статическую переменную внутри класса, в которой и храним экземпляр класса - самого себя. Доступ к которому можно получить при помощи такой же статической функии.
Есть два способа использования этого:
$class=MySingleton::getInstance();
$class->hello();
MySingleton::getInstance()->hello();
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar