Translate
July 30, 2019

PHP в 2019

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

Помните популярную заметку в блоге "PHP: фрактал плохого дизайна"? Впервые прочитав ее, я работал в ужаснейшем месте с большим количеством legacy-проектов на PHP. Эта статья заставила меня задуматься, что мне стоит просто уйти и заняться чем-то совершенно иным, ежели программированием.

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

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

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

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

TL;DR

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

Update: Люди попросили меня показать какой-либо реальный код. Я рад сообщить, что это возможно! Вот исходный код одного из моих хобби-проектов, написанный на PHP и Laravel; вот список из нескольких сотен OSS пакетов, которые мы поддерживаем в нашем офисе. Оба являются хорошими примерами того, как выглядят современные PHP-проекты.

Давайте начнем.

История в целом

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

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

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

Ознакомиться с активным графиком развития над PHP можно здесь.

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

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

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

Вернувшись в дни версии 5.*, производительность PHP была... в лучшем случае средней. Однако с выходом 7.0 большие куски ядра PHP были переписаны с нуля, что привело к увеличению производительности в два-три раза.

Но слов недостаточно. Давайте посмотрим на бенчмарки. К счастью, другие люди потратили много времени на сравнительный анализ производительности PHP. Я считаю, что у Kinsta имеется хороший обновленный список.

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

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

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

Кстати о фреймворках: PHP больше не просто WordPress. Позвольте мне сказать вам кое-что как профессиональный разработчик PHP: WordPress ни в коей мере не представляет современную экосистему.

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

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

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

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

Посмотрите на этот график с указанием количества пакетов и версий с течением времени. С ним также можно ознакомиться на сайте Packagist.

Статистика Packagist.org

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

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

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

Сам язык

Хотя async и await еще не доступны, за последние годы язык значительно улучшился. Вот неполный список новых возможностей PHP:

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

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

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

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

Инструментарий

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

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

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

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

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

В заключение

При этом не стесняйтесь думать о PHP как о дерьмовом языке. Хотя язык, безусловно, имеет свои недостатки и 20-летнее наследие, я могу с уверенностью сказать, что мне нравится работать с ним.

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

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

Разве вы не согласны? Дай мне знать, почему! Вы можете связаться со мной через Twitter или по электронной почте.