PHP в 2019 году

PHP в 2019 году

Так ли страшен слон, как его малюют?

Спойлер: некоторые вещи все еще отстойны, так же как в принципе у почти каждого языка программирования есть свои минусы. Многие основные функции по-прежнему имеют свои непоследовательные сигнатуры методов, все еще есть запутанные параметры конфигурации

Вы помните популярный пост в блоге «PHP: фрактал плохого дизайна»? Давным-давно когда я впервые прочитал его, я был еще начинающим веб-разработчиком, только начал работать джуном в одном довольно дурацком месте, и на меня повесили некоторые устаревшие PHP-проекты. Тогда эта статья заставила меня задуматься, должен ли я просто бросить дальше программировать на PHP и начать плотно изучать другой ЯП.

К счастью, я вскоре сменил место работы, попал в крутую компанию, где смог прокачаться как разработчик в целом, и, что более важно, PHP с тех пор сумел очень развиться с 5 версии. Сегодня мой пост, обращен, наверное, к тем людям, которые больше не программируют на PHP или застряли в старых легаси-проектах.

Конечно все еще есть много разработчиков, пишущих "говно-код" - потому что либо у них нет других вариантов, они должны или потому что, возможно, они не знают как это делать лучше.

Я хочу взглянуть на светлую сторону: давайте сосредоточимся на том, что изменилось, и на способах написания чистого и поддерживаемого кода на PHP. Я хочу попросить вас отложить любые предрассудки на несколько минут. После этого вы можете продолжить думать о PHP точно так же, как и раньше. Хотя, скорее всего, вы будете удивлены некоторыми улучшениями, внесенными в PHP за последние несколько лет. 

Краткий тезис, если "многабукаф"

  • PHP активно разрабатывается с новым выпуском каждый год
  • Производительность с эры PHP 5 выросла вдвое, если не втрое
  • Существует чрезвычайно активная экосистема фреймворков, пакетов и CMS
  • За последние несколько лет в PHP было добавлено много новых функций, и язык продолжает развиваться
  • Инструменты, подобные статическим анализаторам, выросли за последние годы и только продолжают расти

Немного истории

Для краткости рассмотрим цикл выпуска релизов PHP. Сейчас мы имеем в своем распоряжении PHP 7.3, версия 7.4 ожидается в конце 2019 года. PHP 8.0 вероятней всего будет следующей версией после 7.4.

Начиная с поздних версий 5.x, основная команда старается поддерживать ежегодный цикл релизов, и преуспела в этом в течение последних четырех лет.

В целом, каждый новый выпуск активно поддерживается в течение двух лет, плюс еще один год проходит под эгидой «Только исправлений безопасности». Цель состоит в том, чтобы мотивировать разработчиков PHP оставаться в курсе как можно больше: небольшие обновления каждый год намного проще, чем, например, мажорный переход от 5.4 до 7.0.

Активный обзор временной шкалы версий PHP можно найти здесь. Ну и наконец, PHP 5.6 была последней версией 5.x, следующей уже был PHP 7.0. Если вы хотите узнать, что случилось с PHP 6, вы можете прослушать подкаст PHP Roundtable.

Так, ну и попробуем сейчас опровергнуть некоторые распространенные заблуждения о современном PHP.

Производительность PHP

В версиях 5.x производительность PHP была…, ну в лучшем случае средней. В 7.x очень большая часть ядра PHP была переписана с нуля, что привело к значительному увеличению производительности, примерно, в два-три раза. У Kinsta, например, хороший список результатов тестирования производительности PHP на различных фреймворках.

В 7.x настолько возросла производительность, что веб-приложения на PHP имеют сопоставимую ( и в некоторых случаях даже лучшую ) производительность, чем приложения на других языках. Взгляните на этот обширный набор тестов.

Конечно, фреймворки на PHP не будут превосходить тех же C и Rust, но они работают намного лучше, чем Rails или Django, ( нисколько не хейтю Пайтон, сам его очень люблю ) и сравнимы с ExpressJS.

Фреймворки и экосистема

Говоря о фреймворках: PHP это уже не CMS'ки уровня WordPress. Да и большинство CMS на PHP не являются представителем современной экосистемы.

В настоящее время, есть два крутых фреймворка: Symfony и Laravel . Конечно, есть еще и Zend, Yii, Cake, CodeIgniter и т. д. - но если вы хотите знать, как выглядит современная PHP-разработка, вам хорошо было бы познакомиться с одним из этих двух фреймворков.

Оба фреймворка имеют большую экосистему пакетов и продуктов. Начиная от административных панелей и CRM до автономных пакетов, CI для профилировщиков, многочисленных сервисов для работы с веб-сокетами, менеджеры очередей, интеграции платежных систем, слишком много, чтобы перечислить все в одном предложении.

Эти фреймворки предназначены для  разработки своих уникальных проектов, хотя, если вам нужен простой сайт-визитка, блог или корпоративный сайт, то такие CMS, как WordPress и Joomla, конечно же вам в этом помогут, к тому же из года в год они только улучшаются.

Один из способов измерить текущее состояние экосистемы PHP - посмотреть на Packagist, основной репозиторий пакетов для PHP. Можно наблюдать экспоненциальный рост. С более чем 25 миллионами загрузок в день, справедливо сказать, что экосистема PHP уже не так слаба как это было раньше.

Посмотрите на этот график, в котором указано количество пакетов (и версий) с течением времени. Его также можно найти на веб-сайте Packagist .

Помимо фреймворков и CMS, мы также наблюдаем в последние годы рост асинхронных фреймворков. Это фреймворки и серверы, написанные на PHP или других языках, которые позволяют пользователям запускать действительно асинхронный PHP. Примеры тому Swoole , Amp и ReactPHP

С тех пор как мы углубились в асинхронный мир, такие вещи, как веб-сокеты и приложения с большим количеством операций ввода-вывода, стали действительно актуальными в мире PHP.

В списке внутренних рассылок - это место, где ведущие разработчики обсуждают развитие языка, - также говорилось о том, чтобы добавить libuv в ядро.  Для тех, кто не знает, libuv - это та же библиотека, которую Node.js использует для обеспечения асинхронности.

Сам язык

Пока async и await не доступны, но за последние годы было сделано много улучшений для самого языка. Вот неполный список новых функций в PHP:

Если мы уже заговорили о языковых особенностях, давайте также поговорим о том, как язык развивается сегодня. Существует активная основная команда добровольцев, которые продвигают язык вперед, хотя и сообществу разрешено предлагать RFC.

Обсуждение новых функций ведется во "Внутреннем" списке рассылок, которые можно почитать любому пользователю. Прежде чем добавить новую языковую функцию, необходимо провести голосование. Только RFC с большинством голосов не менее 2/3 допускается в ядро.

Вероятно, есть около 100 человек, которым разрешено голосовать, хотя вам не обязательно голосовать за каждое RFC. Членам основной команды, конечно, разрешено голосовать, они должны поддерживать кодовую базу. Помимо них, есть группа людей, которые были индивидуально выбраны из сообщества PHP. Эти люди включают в себя сопровождающих документацию PHP, авторов PHP в целом и выдающихся разработчиков в сообществе PHP.

Хотя большая часть основной разработки выполняется на добровольной основе, один из разработчиков ядра PHP, Никита Попов, недавно был нанят компанией JetBrains для работы над языком на полный рабочий день. Другим примером является фонд Linux, который недавно решил инвестировать в Zend Framework. Подобные работы и вложения гарантируют стабильность для будущего развития PHP.

Набор инструментов

Помимо самого ядра, наблюдается и увеличение инструментов вокруг него в последние несколько лет. На ум приходят статические анализаторы типа Psalm, а так же Phan и PHPStanсозданные Vimeo. 

Эти инструменты будут статически анализировать ваш PHP-код и сообщать о любых возможных и типовых ошибках. В некотором смысле предоставляемые ими функциональные возможности можно сравнить с TypeScript.

Несмотря на то, что нужно полагаться на ДокБлоки, Расмус Лердорф, первоначальный создатель PHP, упомянул идею добавления механизма статического анализа к ядру.  Данный анализ имеем много потенциала, и это огромная задача.

Вдохновленные сообществом JavaScript, сообщество PHP предпринимала попытки расширить синтаксис PHP в пользовательской среде. Проект с именем Pre делает именно это: позволяет использовать новый синтаксис PHP, который переносится в обычный код PHP.

Хотя идея зарекомендовала себя в мире JavaScript, она может работать в PHP только если будет обеспечена надлежащая поддержка IDE и статического анализа. Это очень интересная идея, но она должна развиваться, прежде чем ее можно будет назвать «мейнстримом».

В заключение

Несмотря на все выше сказанное, не стесняйтесь думать о PHP как о дерьмовом языке. Конечно у этого языка определенно есть свои недостатки и хвосты от 20-летнего наследия, но я могу с уверенностью сказать, что мне нравится работать с ним. По своему опыту скажу, что можно создавать надежный, обслуживаемый и качественный код. Бизнес доволен конечным результатом, как и я.

Несмотря на то, что в PHP все еще есть много запутанных вещей, я бы сказал, что это отличный выбор для веб-разработки, если его использовать правильно и с умом.

Сергей Мухин

Веб-разработчик со стажем программирования более 6 лет, постоянно учусь, люблю делать новые проекты.

Есть вопросы?

Я почти всегда в режиме онлайн

Связаться со мной