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