Какие есть варианты реализации класса-хелпера для PHP?
В моем приложении на PHP нужно использовать несколько простых функций, которые понадобится вызывать в любых местах приложения. Как это лучше реализовать с точки зрения соответствия принципам ООП? Ребят, примеры кода или примеры реализации приводите, пожалуйста.
сложно рассуждать не имея представления о функциях.
вообще использование хелперов не есть хорошая практика с точки зрения ООП. Поэтому если есть возможность избежать создания хелпера - лучше это делать. Ну а если избежать нет возможности (например у Вас хелпер обеспечивающий дополнительные функции обработки массивов) тогда обычным классом с приватным конструктором и статическими методами....
Вот такие небольшие функции будут массово использоваться повсеместно в приложении.
В похожем проекте ребята используют и глобальные функции и класс Utils с статическими методами на борту. Равняться на них не хочу. Хочу элегантный код.
Avtomat, а зачем обычными? класс будет хранить состояния? нет, хелперы не хранят состояния ... нужна возможность создания нескольких экземпляров класса? нет, т.к. хелперы не хранят состояния то и создание экземпляров - избыточная операция. Как бы надобности в обычных методах нет, конечно хелпер можно сделать в виде синглтона, но стоит ли...
Максим Федоров, попробовал сделать не статическими методами, плюс внедрить в контейнер приложения, все стало еще печальнее с точки зрения читабельности и удобства. Так что да, все больше склоняюсь к статическим методам класса Helpers или приложения.
Вот такие небольшие функции будут массово использоваться повсеместно в приложении.
У вас там куча слабо связанных друг с другом вещей собрана в одном месте. Не лучше ли распределить это по разным классам, у каждого из которых будет своя зона ответственности?
Алексей Скобкин, приложение в процессе активной разработки, многое еще буду перекраивать, мелкий функционал без претензий на отдельный класс пока кидаю в хелперы. В первой версии уже сформируется понятная мне самому структура.
Засорять глобальное пространство более, чем требуется - дурная практика.
Требуется один статический класс-хелпер - никакого смысла дробить его на функции нет, и с точки зрения будущих изменений особенно.
Минус глобальных функций - засорение таки глобального пространства. Хорошо, когда их 5-10, но их число может вырасти и встанет вопрос об упорядочивании вызова таких функций.
Adamos, ну вообще, все-таки символов меньше. В php ради этого ввели короткую нотацию для массивов.
А переопределить функцию php не даст, а в случае, если функции в одном файле - то тут и ide поможет
BoShurik, и один из простейший способов собрать эти функции в одном файле - это, внезапно, тот самый общий статический класс.
На случай, когда нескольким функциям нужна единая логика, в отрыве от этих функций не существующая (для чего в статическом классе можно просто объявить приватный метод) - тоже что-нибудь предложите?
Тут как раз наоборот :) ООП используется для того, для чего оно не предназначено. Объект хелпера не инстацировать, все его методы по сути являются обычными функциями, так почему бы их не использовать? Я за семантику
"Статический" класс. Хотя в PHP такого понятия нет, но смысл его в реализации статических методов.
Реализация метода __callStatic, который определит вызовы простых функций, либо переопределит некоторые из них, либо добавит новые (ну например stripos в зависимости от кодировки)
Если мы делаем ArrayHelper, то экземпляр будет работать с определенным массивом. А функции для работы с массивами могут принимать как один, так и два, так и более. Тот же array_merge к примеру. Или strcasecamp для работы со строками.
Исходя из Вашей логики с экземпляром удобно будет работать, если параметр у реализуемых функций будет один. Будет реализован статический класс BaseArrayHelper, который может работать с несколькими массивами и содержать статические методы, и наследник ArrayHelper, который работает только с одним через экземпляр. Но это уже тема типизации и совсем отходит от темы хелперов. В таком случае придется написать много кода-обертки, чтобы обернуть стандартные функции - такое будет полезно, если только времени вагон.