Современный PHP — прекрасен и продуктивен
Почти 8 месяцев тому назад я пересел с проектов python/java на проект на php (мне предложили условия от которых было бы глупо отказываться), и я внезапно не ощутил боли и отчаяния, о которых проповедуют бывшие разработчики на ПХП. И вот что я думаю по этому поводу.
Что есть что
Для начала давайте расскажу мой опыт разработки и ощущения от инструментов на других языках, чтобы вы поняли с чем я сравниваю.
Python. Когда речь заходит о проектах на python (чаще всего на Django), мы получаем платформу, которая позволяет достаточно удобно и просто наращивать функционал, строить rest-api сервера, проводить шардирование системы и прочее. Логика работы фреймворка очень понятная и прямолинейная. Даже совсем зеленый разработчик может за пару часов набросать небольшой бложик с админкой. Плюс документация Django — одна из самых качественных, что я видел. К этому всему добавляется синтаксический сахар python, который помогает реализовывать определенные паттерны весьма элегантно. Если мы отходим от Django в сторону Tornado/aiohtpp/Twisted/Flask итд — то там начинается боль, ибо код в них писать гораздо неприятней, чем в Django.
Java. Если мы говорим про Java, например, Spring — то это системы, которые вызывают анальную боль тем, что заставляют тебя конфигурировать все, что можно конфигурировать. Порог вхождения очень высокий, огромное число нюансов, которое нужно держать в голове, плюс сам синтаксис Java заставляет тебя писать весьма объемные конструкции (правдиво для всех проектах на шестой Java). Но в качестве награды мы получаем весьма надежные и гибкие системы, которые могут пережить не один десяток программистов с весьма посредственными руками.
Что же касается PHP
Перед началом работы я прочитал книгу: Мэтт Зандра — PHP объекты, шаблоны и методики программирования, и убедился, что PHP в общем-то без особой боли позволяет реализовывать те или иные паттерны разработки. Т.е. в PHP можно писать правильный код, который будет не сильно отличаться от того, что мы получаем на Python/Java.
Zend Framework 1
Проект внутреннего сервиса меня встретил Zend Framework 1 на PHP 5.3. Скажу сразу, что многие решения на данной платформе выглядят весьма спорно, а язык PHP 5.3 имеет ограничения на установление типа возврата функций (методов), тем не менее, достаточно быстро понимаешь, где что лежит, как что прокидывается, а как что формируется.
Например, если мы рассматривает Zend Forms, то они практически под копирку делают то, что делают классические формы в Django. Синтаксис построения запросов в ДБ Zend DB Table — не вызывает какого-то негатива, и весьма очевидно работает.
Т.е. буквально за 2–3 дня я смог полноценно разбираться и стал писать код, который делал то, что от него требовалось вполне адекватным способом.
Symfony 3.4
Спустя 3 месяца меня перевели на другой проект на Symfony 3.4 и PHP 7.1 — и вот это просто бомба. У меня откровенно было ощущение, что мне дали в ручки Django, куда добавили надежность системы из Java.
- Шаблонизатор Twig — полный клон Jinja от Django.
- Doctrine ORM — аналог Hibernate
- Аннотации Symfony — аналог декораторов из Python
- Auto-wiring Symfony — даже работает очевидней, чем DI в Spring
- Очевидные конфигурации секрьрности
- Удобное построение rest-APi клиентов.
- Удобное написание джоб для крона (в данном случае в симфонии они называются консольные команды)
- Удобный дебагер и консольный помощник.
Плюс сам язык PHP 7.1 уже позволял указывать возвращаемые типы, делать мульти перехватчик исключений и прочие ништяки. И скажем так, пропал абсолютно какой-либо дискомфорт от работы с инструментом. И в некоторых местах все работает даже удобней.
Единственный жирный минус — это недостаточная документация. Т.е. в документации указываются самые простые кейсы, а все что интересней, уже требует копания в исподниках symphony, ну и фреймворк на удивление не так популярен в Гугле, как бы того хотелось.
Поэтому, я абсолютно не понимания, почему люди плюют в сторону PHP, когда он работает и весьма клево.
А есть ли разница
Также хочу отметить такой момент, что после того, как ты поработал на 3–4 современных веб-фреймворках, тебе приходит понимание, что все везде работает схожим образом. Отличаются названия и реализации, а общие концепции 1 в 1. Поэтому, скажем, если вы работали на Django, то пересесть на php Symfony / .Net CORE MVC — можно без особо труда за пару месяцев.
P.s. если я все же слеп и глуп, прошу в комментарии.