Возможный дубликат:
Кому нужны синглеты?
Я всегда пишу в отношении лучшей практики , но я также хочу понять, почему данная вещь – лучшая практика .
Я читал в статье (я, к сожалению, не помню), что классы singleton предпочтительнее создавать, а не делать со статическими функциями и получать доступ с помощью оператора разрешения области (: :). Поэтому, если у меня есть класс, содержащий все мои инструменты для проверки, короче:
class validate { private function __construct(){} public static function email($input){ return true; } }
Мне сказали, что это считается плохой практикой (или, по крайней мере, предостерегаемой), из-за таких вещей, как сборщик мусора и обслуживание. Так что критика «singleton class as static methods» хочет, это то, что я создаю экземпляр класса. Я на 100% уверен, что когда-нибудь создам экземпляр. Мне кажется, что я делаю «двойную работу», потому что там все готово. Что мне не хватает?
Какая точка зрения по этому вопросу? Конечно, это не проблема с жизнью и смертью, но, возможно, так же хорошо, если опция есть 🙂
Пример одноэлементных классов в php:
Создание шаблона проектирования Singleton в PHP5: Ans 1:
Создание шаблона проектирования Singleton в PHP5: Ans 2:
Singleton is considered "bad practice".
В основном из-за этого: как тестируется шаблон реестра или singleton hard в PHP?
почему синглтон плохо?
почему одинокие люди злы?
Хороший подход: инъекция зависимостей
Представление о повторном использовании: отмените свой код PHP для повторного использования
Вам нужен контейнер для инъекций зависимости
Статические методы против одиночек не выбирают ни
Переговоры по чистому кодексу – «Глобальное государство и синглтоны»
Инверсия контрольных контейнеров и шаблон впрыска зависимостей
Хотите узнать больше? :
Каковы недостатки использования класса базы данных PHP в качестве одноэлементного?
Дизайн класса абстракции базы данных с использованием PHP PDO
Будет ли синглтон хорошим шаблоном дизайна для сайта микроблогов?
Изменение класса для инкапсуляции вместо наследования
Как получить доступ к объекту из другого класса?
Тестирующий код, который использует синглтоны
Схема синглтона ( источник ):
Объект singleton – это объект, который создается только один раз. Это не то же самое, что и шаблон Singleton , который является (Anti-) шаблоном, как писать класс, который может быть создан только один раз, Singleton (большой S в начале):
«Убедитесь, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к нему».
Что касается PHP, вам обычно не нужно реализовывать шаблон Singleton. На самом деле вам следует избегать этого, когда вы просите о лучшей практике , потому что это плохая практика .
Кроме того, большинство примеров кода PHP, которые вы находите, являются полузаготовленными реализациями шаблона, которые игнорируют работу PHP. Эти фиктивные реализации не соответствуют требованиям «обеспечить» в шаблоне.
Это также говорит кое-что: часто, что это не нужно. Если небрежная реализация делает работу уже пока не приближается к тому, для чего предназначен шаблон, неправильный шаблон использовался для этой ситуации, он начинает становиться Anti-Pattern .
В PHP обычно нет необходимости во что бы то ни стало гарантировать, что класс имеет только один экземпляр, PHP-приложения не настолько сложны, что вам это потребуется (например, нет нескольких потоков, которые могут потребоваться ссылаться на атомный экземпляр).
Часто остается глобальная точка доступа к экземпляру класса, которая для большинства разработчиков PHP (неверно) использует шаблон. Как известно, сегодня использование таких «синглтонов» приводит к стандартным проблемам глобального статического состояния, которые вводят сложность в ваш код на нескольких уровнях и уменьшают повторное использование. Как программист вы теряете способность использовать свой код гибким способом. Но гибкость – очень важный метод решения проблем. И программисты решают проблемы целый день.
Поэтому перед тем, как применять шаблон дизайна, необходимо оценить про и минусы. Просто использование некоторых шаблонов чаще всего не помогает.
Для начала я бы сказал, просто напишите ваши классы и позаботьтесь о том, как и когда они создаются в какой-то другой части вашей логики приложения, поэтому все остается гибким.
Ну, на самом деле это не синглтон; singleton гарантирует, что у вас есть только один экземпляр класса, и здесь нет метода, который бы извлекал один экземпляр Validate. Ваш дизайн здесь выглядит как статический класс. Это не вызовет проблемы с сборщиком мусора (по крайней мере, код, который вы здесь разместили), потому что это будет загружено в память, несмотря ни на что.