ReactJS отказался от классов 3-4 года назад, назвав такой подход сложным и дорогим. Вот решил написать плагин для WordPress тоже без классов, но с ОПП.
Это все в тему того что ООП это не только классы. Классы это лишь подтип ООП.
Но 99% программистов уверены что ООП без классов не бывает.
Можно ли писать ООП в PHP & WP только на функциях и хуках?
Классы путают и людей, и машины
Именно так звучит заголовок мотивации в ReactJS, в котором они описывают причины отказа от классов и переход в функции и хуки.
Подробнее тут.
А можно ли так делать в WordPress?
Именно так как у ReactJS & JS на 100% — нельзя из-за ограничений PHP. Но в 90% случаев это реально.
Можно писать ООП, инкапсуляцию, наследование, полиморфизм, переиспользование кода и все ключевые идеи ООП — но без классов, только с функциями.
Отличие лишь в том что у JS есть прототипы и они позволяют делать много чего нельзя в PHP.
Однако я долго сомневался и решил попробовать…
Написать плагин для WP с достаточно сложным функционалом, но без классов, только функции, хуки и неймспейсы.
В общем код тут https://github.com/ddev-app/feditor
Суть решения очень простая:
- инкапсуляция на базе неймспейсов
- наследование через хуки — легко допилить функционал как тебе надо — не трогая основной код
- переиспользование — легко брать базу и допиливать ее под свои цели
И все это без классов.
ООП есть. Классов нет. Магия!
Плюсы и минусы
Если в JS такое может работать почти везде, то в PHP ограничений больше.
Такой подход не сработает если мне нужно управлять состоянием внутри запроса. В этом случае мне придется писать класс. Но такого тут пока нет и не предвидится.
Приходится перестроить мозг из SOLID в GRASP — разный фундамент мышления — для многих программистов это сложно.
Но если говорить о плюсах:
- код пишется быстрее — меньше кода
- он легче читается — если кто то решит доработать логику под себя
- меньше зацепленности — такой подход требует использовать хуки — а значит фаталов будет меньше