Cover Image for Как писать код для WordPress без классов? Только функциональный ООП?

Как писать код для 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 – разный фундамент мышления – для многих программистов это сложно.

Но если говорить о плюсах:

  • код пишется быстрее – меньше кода
  • он легче читается – если кто то решит доработать логику под себя
  • меньше зацепленности – такой подход требует использовать хуки – а значит фаталов будет меньше
  • лучше позднее связывание – можно поменять почти все что угодно под себя и свои задачи