Назначение. Обеспечивает наличие у класса одного только экземпляра-объекта на всю систему и предоставляет к нему глобальный доступ. Ни как не могу понять, единственный экземпляр объекта! Ведь любой класс может быть единственным экземпляром объекта. Создать объект и используешь его во всем движке. В чем же заключается отличие? Поправьте если я не правильно понял. Заранее благодарен!
для начала учи матчасть - класс это класс, объект - это объект, каждый объект принадлежит к какому-то классу. Ну типа как негр - экземпляр класса негров. Обычно можно создать сколько угодно экземпляров класса: PHP: <?php $a = new a; $a1 = new a; $a2 = new a; Паттерн singleton позволяет иметь только один экземпляр класса PHP: <?php $a = a::getInstance(); $a1 = a::getInstance(); $a2 = a::getInstance(); тут переменные содержат ссылки на один и тот же экземпяр, созданый внутри статики класса a.
Ну Можно создать один объект класса и все PHP: $a = new class; и все. И использовать этот $a по всюду!
ARACOOL Фишка в статичном доступе и обработке ошибок. К тому же это не мешает кому-то ещё сделать $b = new class; и вот второй объект. А так a::getInstance() и всё. Ну а так же есть и другие полезности
самая фишка (мне нравится и заметил psih), что если где-то в других классах и фунцкциях ты хочешь использовать объект, то естественно к нему надо как-то добраться. Через параметр ли, через глобал или еще как. А синглтон, он как класс-объект. Доступ к нему как классу, а обращение как к экземпляру класса. Очень некрасивый пример сейчас будет, но тем не менее, чтобы продемонстрировать. Допустим, тебе надо нарисовать сайт. Ты придумываешь, что, вот у меня будет класс page - дефолтовая страничка со всем основными настройками и методом вывода контента. И все реальные странички будут ее наследовать и добавлять какие-то свойства и методы. Кроме того, ты используешь шаблонизатор, допустим смарти. Для того чтобы объект смарти был всегда под рукой (в каждом классе представляющем страницу) тебе его надо (как уже было ранее сказано) передать. В виде ли свойства класса page толи еще как-то. Так вот, если использовать синглтон, то от этой проблемы ты избавляешься. В любом месте кода, где бы не захотел, оращаешься к нему tplproc::getInstance()->assign(..) и ты уверен, что этот тот самый единственный экземпляр. Вот. попытался на пальцах)
ARACOOL Зависит от архитектуры. У меня например полезность в том, что все классы имеют деструкторы и уничтожение объектов происходит в правильном порядке благодоря ядру-синглетону, которое занимается загрузкой всех классов в системе (что автоматом делает их по сути синглетонами тоже, т.к. ядро видит что такой объект уже создан и возвращает его). Ну и ShamahN правильно описал. Я тоже таким же подходом пользуюсь, только у меня всегда идёт $object = Core::getInstance('className');
Эта называется вроде как называется абстрактная фабрика. Причем, используемая как статика. По хорошему ее нужно вызывать через синглтон, т.е. так Core::getInstance()->getClassName()
всякими но в основном command strategy factory method monostate mapper collection active record да короче когда как
ИМХО я считаю, что надо изначально понимать, что класс это всего лишь описание - набор инструкций, а объект это набор данных в памяти, тогда всё становится на свои места, а потом уже начинаются особенности ЯП...