Хабрахабр

[Перевод] PHP в 2019: лучше, чем вы о нём думаете

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

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

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

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

TL; DR

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

Краткая история

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

Цель состоит в том, чтобы мотивировать разработчиков на PHP поддерживать актуальность версии: применить небольшие обновления каждый год намного проще, чем, например, перейти с 5. В целом, каждый новый релиз активно поддерживается в течение двух лет и получает ещё один год «исправлений безопасности». 0. 4 на 7.

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

6 был последним релизом ветки 5.*, а 7. Наконец, PHP 5. Если вы хотите узнать, что случилось с PHP 6, Вы можете прослушать подкаст PHP Roundtable. 0 являлся следующим.

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

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

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

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

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

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

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

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

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

Начиная от административных панелей и CRM до автономных пакетов (в оригинале — «standalone packages»), от CI до профилировщиков, а также многочисленные сервисы, такие как серверы веб-сокетов, менеджеры очередей, интеграции платежей; честно говоря, слишком много, чтобы перечислить все. Оба фреймворка (Symfony и Laravel) имеют большую экосистему пакетов и продуктов.

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

Он экспоненциально растёт. Один из способов измерить текущее состояние экосистемы PHP — посмотреть на packagist — основной репозиторий пакетов для PHP. При ~25 миллионах загрузок в день, можно справедливо сказать, что PHP-экосистема  — уже не та слабая сторона, которой она являлась раньше.

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

Кроме фреймворков приложений и CMS, в последние годы мы также наблюдаем рост асинхронных фреймворков.

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

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

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

Сам язык

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

  • Стрелочные функции
  • Оператор объединения с null
  • Трейты
  • Типизированные свойства
  • Оператор распаковки
  • JIT компилятор
  • Интерфейс внешних функций
  • Анонимные классы
  • Декларации возвращаемого типа
  • Современная криптография
  • Генераторы
  • Многое другое

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

Прежде чем новая языковая функция будет добавлена, необходимо провести голосование. Затем эти RFC обсуждаются в списке рассылки «internals», который также можно прочитать в интернете. Только RFC с большинством голосов, не менее ⅔ от всех проголосовавших, допускаются к включению в ядро.

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

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

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

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

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

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

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

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

В заключение

Несмотря на всё сказанное, не стесняйтесь думать о PHP как об ужасном языке. У него определённо есть свои недостатки и 20-летнее наследие, но я могу с уверенностью заявить, что работать с ним мне нравится.

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

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

Напиши в комменты, почему! Вы не согласны?

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»