Утилиты файл в php?
Каков наилучший способ работы с "служебными" функциями в OOP PHP-фреймворке? Прямо сейчас у нас просто есть файл с несколькими функциями, которые необходимы по всей системе. (Например, distribute()
функция, которая принимает значение и массив и возвращает массив со значением, распределенным в тех же пропорциях и с теми же ключами, что и входной массив.)
Я всегда чувствовал себя "грязным", используя это, потому что это совсем не объектно-ориентировано. Лучше ли переносить их в различные классы как статические методы, или это просто семантический обходной путь? Или просто будет какой-то уровень в структуре, где некоторые вещи выпадают за пределы структуры ООП?
3 ответа
Я всегда был более прагматичным в таких вопросах.
Если вы хотите получить полноценную ООП, вам, очевидно, следует объединить их в классы. Однако эти классы будут только контейнерными классами, потому что они на самом деле не представляют объекты любого вида.
Также: использование классов потребует от вас наличия экземпляра этого класса, использования шаблона синглтона или объявления каждой функции статической. Первый медленнее (хорошо, может быть, не так много, но в большой среде подобные вещи тоже становятся большими - особенно в интерпретируемых языках, таких как PHP), в то время как второй и третий просто бесполезны и являются просто оболочкой ООП для набора функций (особенно третий подход).
РЕДАКТИРОВАТЬ: не стесняйтесь доказать, что я не прав. Я могу быть. Я не слишком опытен и всегда видел это таким образом, но я могу ошибаться.
Я склонен делать Util()
класс, который содержит только статические методы, не имеет атрибутов и не наследуется от. По сути, он действует как "пространство имен" для ряда служебных функций. Я позволю этому классу увеличиваться в размере, но иногда делю методы на их собственные классы, если ясно, что эти методы предназначены только для работы с определенными видами данных, или если ясно, что группа связанных методов должна сгруппированы в класс вместе, возможно, с некоторыми атрибутами.
Я думаю, что вполне нормально отклоняться от чисто ООП-процедур до тех пор, пока код, который отклоняется, хорошо организован и не создает архитектурных недостатков в вашей системе, которые усложняют понимание и поддержку.
Я всегда думаю о служебных функциях как о расширении стандартных функций php. Они не являются объектно-ориентированными, потому что вы действительно не получаете никакой выгоды от того, чтобы делать их OO