Соблюдение PSR-1. Побочные эффекты и знаки. Как соблюсти при Композиции?
Разбираюсь со стандартом PSR-1.
Пункт 3 гласит:
*Файлам СЛЕДУЕТ либо объявлять знаки (классы, функции, константы, и т.д.) или оказывать побочный эффект (например, генерировать вывод, изменять .ini настройки, и т.д.) но НЕ СЛЕДУЕТ делать и то и другое.*
По логике получается если я объявил класс `SuperClass` в файле `superclass.php`, в этом же файле я не могу выполнить `require_once` другого файла.
Как быть в той ситуации, когда у меня есть набор файлов с классами-helper'ами(например - хэширование, генерирование имени пользователя, генерирование графиков...), которые используются в классе `SuperClass`?
**Как я бы сделал**:
**Первый вариант**: могу подключить helper'ы в родительском файле, который использует `SuperClass`. Но тогда это будет нарушением принципа Open-Close. Так как клиент должен будет знать о реализации класса, который он использует.
**Второй вариант** - я могу использовать Dependency Injection и передавать в SuperClass нужные ему helper'ы. Но их ОЧЕНЬ много. Будет конструктор-монстр или очень долгий шаблон Builder, что тоже не всегда хорошо.
Подскажите, пожалуйста, какой вариант лучше и есть ли еще варианты?
Не использовать PSR-1 НЕ могу - требование менеджера.
Ответы (1 шт):
PSR-1 предполагает использование механизма autoloading, в частности соответствующего PSR-4 (либо устаревшего PSR-0).
И всё, никакого противоречия в требованиях, никаких странных архитектурных граблей, как и вовсе нет множества раскиданных всюду include. В файле с объявлением класса остаётся только объявление этого класса. Все другие классы, используемые в этом файле, будут подгружены из своих файлов автоматически по вполне понятным путям из названия и пространства имён требуемого класса.
Впрочем, я бы не сказал, что include_once или require_once объявления чего-либо другого нарушает требование PSR-1, что файл должен или объявлять что-то или выполнять side-effects.