Лучшая практика в отношении одноэлементных классов PHP

Возможный дубликат:
Кому нужны синглеты?

Я всегда пишу в отношении лучшей практики , но я также хочу понять, почему данная вещь – лучшая практика .

Я читал в статье (я, к сожалению, не помню), что классы singleton предпочтительнее создавать, а не делать со статическими функциями и получать доступ с помощью оператора разрешения области (: :). Поэтому, если у меня есть класс, содержащий все мои инструменты для проверки, короче:

class validate { private function __construct(){} public static function email($input){ return true; } } 

Мне сказали, что это считается плохой практикой (или, по крайней мере, предостерегаемой), из-за таких вещей, как сборщик мусора и обслуживание. Так что критика «singleton class as static methods» хочет, это то, что я создаю экземпляр класса. Я на 100% уверен, что когда-нибудь создам экземпляр. Мне кажется, что я делаю «двойную работу», потому что там все готово. Что мне не хватает?

Какая точка зрения по этому вопросу? Конечно, это не проблема с жизнью и смертью, но, возможно, так же хорошо, если опция есть 🙂

Solutions Collecting From Web of "Лучшая практика в отношении одноэлементных классов PHP"

Пример одноэлементных классов в php:
Создание шаблона проектирования Singleton в PHP5: Ans 1:
Создание шаблона проектирования Singleton в PHP5: Ans 2:

Singleton is considered "bad practice".

В основном из-за этого: как тестируется шаблон реестра или singleton hard в PHP?

  • почему синглтон плохо?

  • почему одинокие люди злы?

  • Хороший подход: инъекция зависимостей

  • Представление о повторном использовании: отмените свой код PHP для повторного использования

  • Вам нужен контейнер для инъекций зависимости

  • Статические методы против одиночек не выбирают ни

  • Переговоры по чистому кодексу – «Глобальное государство и синглтоны»

  • Инверсия контрольных контейнеров и шаблон впрыска зависимостей

Хотите узнать больше? :

  • Каковы недостатки использования класса базы данных PHP в качестве одноэлементного?

  • Дизайн класса абстракции базы данных с использованием PHP PDO

  • Будет ли синглтон хорошим шаблоном дизайна для сайта микроблогов?

  • Изменение класса для инкапсуляции вместо наследования

  • Как получить доступ к объекту из другого класса?

  • Тестирующий код, который использует синглтоны

Схема синглтона ( источник ):

Схема принятия решений по Singleton

Объект singleton – это объект, который создается только один раз. Это не то же самое, что и шаблон Singleton , который является (Anti-) шаблоном, как писать класс, который может быть создан только один раз, Singleton (большой S в начале):

«Убедитесь, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к нему».

Что касается PHP, вам обычно не нужно реализовывать шаблон Singleton. На самом деле вам следует избегать этого, когда вы просите о лучшей практике , потому что это плохая практика .

Кроме того, большинство примеров кода PHP, которые вы находите, являются полузаготовленными реализациями шаблона, которые игнорируют работу PHP. Эти фиктивные реализации не соответствуют требованиям «обеспечить» в шаблоне.

Это также говорит кое-что: часто, что это не нужно. Если небрежная реализация делает работу уже пока не приближается к тому, для чего предназначен шаблон, неправильный шаблон использовался для этой ситуации, он начинает становиться Anti-Pattern .

В PHP обычно нет необходимости во что бы то ни стало гарантировать, что класс имеет только один экземпляр, PHP-приложения не настолько сложны, что вам это потребуется (например, нет нескольких потоков, которые могут потребоваться ссылаться на атомный экземпляр).

Часто остается глобальная точка доступа к экземпляру класса, которая для большинства разработчиков PHP (неверно) использует шаблон. Как известно, сегодня использование таких «синглтонов» приводит к стандартным проблемам глобального статического состояния, которые вводят сложность в ваш код на нескольких уровнях и уменьшают повторное использование. Как программист вы теряете способность использовать свой код гибким способом. Но гибкость – очень важный метод решения проблем. И программисты решают проблемы целый день.

Поэтому перед тем, как применять шаблон дизайна, необходимо оценить про и минусы. Просто использование некоторых шаблонов чаще всего не помогает.

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

Ну, на самом деле это не синглтон; singleton гарантирует, что у вас есть только один экземпляр класса, и здесь нет метода, который бы извлекал один экземпляр Validate. Ваш дизайн здесь выглядит как статический класс. Это не вызовет проблемы с сборщиком мусора (по крайней мере, код, который вы здесь разместили), потому что это будет загружено в память, несмотря ни на что.