Свой путь в сфере разработки я начала с языка PHP, но позднее в индустрии программирования акцент сместился в сторону JavaScript. Отчасти причина в том, что фронтенд-составляющая веб-среды так или иначе работает именно на JS. В этой сфере я провела последние десять лет.
Недавно мне подвернулась кое-какая работа, связанная с PHP. Поначалу я была удивлена, ведь за этим языком закрепилась дурная слава – преимущественно из-за его ассоциирования с устаревшими проектами WordPress (и всеми вытекающими из этого уязвимостями). Но WordPress – это всё же не PHP.
В общем мне стало любопытно. Кто они – те люди, которые до сих пор используют PHP? Почему они это делают? И как этот опыт можно сравнить с моим скромным миром серверных проектов на JS?
Грозит ли PHP скорое вымирание?
Эволюция PHP и его текущее положение в мире
Язык PHP, который изначально подразумевал «Personal Home Page» (личная домашняя страница), а теперь трактуется как «PHP: Hypertext Preprocessor» (PHP: препроцессор гипертекста), был разработан в 1994 году Расмусом Лердорфом. Поначалу он представлял собой простой набор скриптов Perl для поддержания личной страницы Лердорфа. Со временем же PHP вырос в полнофункциональный скриптовый язык, ставший основой миллионов сайтов по всему миру.
С момента своего появления PHP прошёл несколько значительных этапов развития:
- PHP 3 (1998): с этим релизом, благодаря сотрудничеству Лердорфа с двумя израильскими разработчиками – Зеевом Сураски и Энди Гутмансом – язык обрёл более надёжную скриптовую форму.
- PHP 4 (2000): в этой версии был внедрён механизм Zend Engine, скриптовый движок, который повысил производительность PHP и сделал его более расширяемым.
- PHP 5 (2004): этот релиз привнёс значительные доработки, включая поддержку объектно-ориентированного программирования (ООП), которое позволило разработчикам создавать более организованный и удобный в обслуживании код.
- PHP 7 (2015): ввиду определённых внутренних сложностей в команде разработки версия PHP 6 была пропущена. Что же касается PHP 7, то она обеспечила значительный прирост производительности, а также предложила ряд новых функций, таких как оператор трёхстороннего сравнения и оператор объединения с неопределённым значением. Помимо этого, в ней была реализована более строгая система типизации и обработки ошибок.
- PHP 8 (2020): это последний старший релиз, в котором было добавлено несколько новых функций и оптимизаций, о которых я расскажу далее.
За время своего существования PHP впитал множество современных практик написания кода, что сделало его более гибким и податливым для разработчиков языком. Поворотным моментом стало внедрение в PHP 5 принципов ООП, что позволило создавать более обслуживаемый и переиспользуемый код.
Ещё одним значительным улучшением стало внедрение Composer, менеджера зависимостей, который упростил использование в проектах PHP сторонних библиотек.
Сообщество PHP также утвердило стандартные рекомендации к языку (PSR, PHP Standard Recommendations) с целью продвижения лучших практик и правил написания кода. PSR охватывает различные аспекты разработки, такие как стили программирования, автозагрузка и промежуточное ПО, направленные на обеспечение согласованности и функциональной совместимости проектов PHP.
Текущее состояние PHP
▍ JIT-компилятор
Одной из наиболее выдающихся возможностей PHP 8 является динамический (JIT, just in time) компилятор. Он компилирует программу в машинный код во время выполнения, что способствует значительному повышению быстродействия в определённых видах приложений, таких как вычислительно нагруженные задачи или длительно выполняющиеся скрипты командной строки. И хотя JIT-компилятор не оказывает существенного влияния на скорость работы веб-приложений, он является очередным эволюционным шагом PHP и демонстрирует стремление этого языка к модернизации.
▍ Атрибуты
В PHP 8 появились атрибуты, также называемые аннотациями, которые позволили разработчикам добавлять метаданные в классы, методы, свойства и прочие конструкции языка. Атрибуты могут упрощать и разгружать программу, заменяя громоздкие аннотации DocBlock и позволяя писать более выразительный код. Обычно они используются во фреймворках и библиотеках для реализации таких аспектов, как маршрутизация, валидация и внедрение зависимостей.
▍ Типы объединения и прочие нововведения
Объединения типов (union types) ставшие ещё одним новшеством в PHP 8, позволяют указывать несколько типов для одной переменной, параметра или возвращаемого значения. Эта функция повышает эффективность подсказок при вводе кода, а также делает его более читаемым и надёжным.
К прочим новшествам PHP 8 также относятся именованные аргументы, продвижение свойств конструктора и оператор nullsafe, все из которых делают PHP более современным и выразительным языком.
Достоинства PHP
Ниже я в сжатой форме перечислила сильные стороны этого языка.
▍ Простота и лёгкость освоения
Одним из наиболее значительных преимуществ PHP является его простота и скорость освоения. Этот язык создавался с учётом доступности для начинающих и несёт в себе простой синтаксис, который позволяет быстро вникнуть в суть и начать писать функциональный код. Такой низкий порог вхождения способствовал широкому распространению PHP и его популярности среди веб-разработчиков.
▍ Богатая встроенная функциональность
PHP предлагает множество встроенных возможностей, которые упрощают работу с типичными задачами вроде управления строками, вычисления даты и времени, обработки файлов. Эта функциональность уменьшает потребность во внешних библиотеках и упрощает разработку, позволяя программистам сосредотачивать усилия на реализации основных возможностей создаваемых ими приложений.
▍ Обширное сообщество и огромное множество ресурсов
PHP имеет большое и активное сообщество разработчиков, что подразумевает великое множество ресурсов для обучения и решения проблем, начиная с официальной документации, учебных пособий и форумов, заканчивая блогами и темами на Stack Overflow. Помимо этого, сообщество способствует развитию обширной экосистемы библиотек, фреймворков и инструментов, упрощающих разработку и повышающих общую продуктивность.
▍ Множество вариантов хостинга и совместимость
PHP имеет прекрасную поддержку со стороны провайдеров хостинга, поэтому всегда можно без проблем найти решение для размещения любого проекта на базе этого языка. За счёт широкой совместимости с различными платформами и серверами разработчики могут развёртывать приложения с минимальными усилиями. Этот широкий спектр возможностей хостинга также позволяет легко находить рентабельные решения как для малых, так и для крупных проектов.
▍ Производительные фреймворки
Экосистема PHP включает несколько производительных фреймворков, которые помогают создавать надёжные, масштабируемые и удобные в обслуживании приложения. Такие решения, как Laravel, Symfony и Yii обеспечивают прочную основу для создания веб-приложений, предлагая инструменты и абстракции, которые упрощают задачи вроде маршрутизации, доступа к базам данных и обработки форм. Эти фреймворки также следуют современным практикам программирования и стандартам, помогая разработчикам писать чистый и легко обслуживаемый код.
▍ Непрерывная разработка и поддержка со стороны основной команды PHP
Стремление основной команды разработчиков языка к его постоянному совершенствованию является ещё одним достоинством PHP. Из предыдущего раздела видно, что за годы своего существования этот язык прошёл серьёзный эволюционный процесс. В каждом его релизе появлялись возможности, которые делали его более мощным и выразительным. Именно непрерывная разработка и поддержка стали причиной, по которой PHP до сих пор остаётся вполне актуальным решением для веб-разработки, поспевающим за современными технологиями и лучшими практиками.
Какая у тебя группа крови? Баг-положительная.
Недостатки PHP
Естественно, есть у этого языка и слабые стороны, которые я тоже вкратце опишу.
▍ Проблемы с легаси-кодом и устаревшими практиками
Один из недостатков PHP заключается в проблемах с легаси-кодом и преобладании устаревших практик в долгоживущих проектах. Ввиду своей длительной истории и широкого распространения PHP накопил значительный объём «плохого кода» и устаревших техник, которые присутствуют в легаси-приложениях. Новички в PHP-разработке могут сталкиваться с этими проблемами, которые определённо будут вызывать недовольство и снижать продуктивность.
▍ Безопасность
PHP прославился своей склонностью к уязвимостям в безопасности, хотя зачастую виной тому становится следование слабым практикам программирования, а не характерные недочёты самого языка. Тем не менее изобилие устаревших проектов и широкое использование PHP в системах управления контентом вроде WordPress способствует восприятию этого языка как небезопасного. При использовании PHP разработчикам следует применять лучшие методы обеспечения безопасности, чтобы избежать внедрения в создаваемые ими приложения уязвимостей.
▍ Несогласованность в именовании функций и расстановке параметров
Для встроенных функций в PHP характерна несогласованность в именовании и расстановке параметров, что может сбивать с толку. Эта несогласованность стала следствием органического развития PHP с течением лет и включения в него функций из различных источников. И хотя этот недостаток не является критическим, он всё же требует более частого обращения к документации, чем в случае с более последовательными языками.
▍ Критика производительности в сравнении с более новыми языками
PHP сталкивается с критикой в отношении своей производительности по сравнению с более свежими языками вроде Go и Node.js. Несмотря на то, что быстродействие PHP за время его существования значительно повысилось, особенно с релизом PHP 7 и внедрением JIT-компилятора в PHP 8, в определённых случаях он всё равно отстаёт от более молодых языков. В случае создания приложений, опирающихся на быстродействие, для достижения желаемого результата иногда будет лучше обратиться к альтернативным языкам или технологиям.
▍ Восприятие языка как устаревшего
Наконец, иногда PHP воспринимается как отстающий по своим возможностям в сравнении с современными аналогами и фреймворками. Несмотря на то, что PHP проделал значительные шаги в реализации современных практик программирования и обрёл множество новых возможностей, его репутацию как «старого» языка пошатнуть сложно. Такое восприятие делает его менее привлекательным решением для некоторых разработчиков и нередко приводит к выбору более молодых языков. Тем не менее, как показали предыдущие разделы, PHP остаётся надёжным и гибким решением, которое продолжает развиваться и адаптироваться к потребностям современной веб-разработки.
Юмор на тему программирования
Итак, кто же сегодня использует PHP?
Согласно W3Techs, на май 2023 года PHP используется на 78,9% всех сайтов, язык бэкенда которых известен. Это показывает широкое распространение PHP в сообществе веб-разработки. Более того, он также сохраняет значительную долю на рынке среди серверных языков программирования. Об этом говорит статистика BuiltWith, которая показывает, что PHP используется на более, чем 22 миллионах активных сайтов. Опрос разработчиков, проведённый ресурсом Stack Overflow в 2021 году, также показал, что PHP является восьмым по популярности языком, об использовании которого сообщили 26,2% всех респондентов.
Многие известные компании и сайты в своих серверных потребностях опираются именно на него:
- Facebook: несмотря на то, что в Facebook разработали собственный производный от PHP язык Hack и среду выполнения HHVM (HipHop Virtual Machine), изначальная инфраструктура этой платформы создавалась на PHP.
- Wikipedia: эта онлайн-энциклопедия, являющаяся одним из самых посещаемых ресурсов по всему миру, работает на PHP и открытом ПО MediaWiki.
- Slack: согласно StackShare, PHP является частью технологического стэка Slack и играет важнейшую роль в работе его платформы обмена сообщениями.
- MailChimp: как отмечается на Quora, бэкенд этого популярного провайдера услуг email-маркетинга работает на PHP.
- Etsy: согласно данным StackShare, этот электронный маркетплейс по продаже товаров ручной работы и винтажных изделий также реализует свои веб-приложения на PHP.
Помимо этого, PHP широко используется в самых различных индустриях. Например:
- Системах управления контентом (CMS, Content management systems): как пишут на WPBeginner, PHP лежит в основе популярных систем управления контентом вроде WordPress, Drupal и Joomla, на которых работают миллионы сайтов по всему миру.
- E-commerce: по информации с Cloudways основанные на PHP платформы вроде Magento, WooCommerce (плагин WordPress) и PrestaShop используются бизнес-проектами различных масштабов для создания онлайн-магазинов.
- Кастомных веб-приложениях: разработчики используют PHP для создания веб-приложений в различных сферах, простирающихся от здравоохранения и финансов до образования и развлечений. Гибкость и надёжность этого языка делают его популярным выбором для веб-разработки.
NodeJs VS PHP: сравнение показателей, функционала и производительности на 2023 год
Сравнение бэкенд-возможностей PHP и JavaScript
Быстродействие является важнейшим аспектом любого веб-приложения. С релизом 7 и 8 версии PHP проделал значительные шаги в сторону повышения производительности, которые подробно раскрыты на PHP.net. Сегодня быстродействие этого языка уже намного ближе к JS-инструментам бэкенда вроде Node.js. Тем не менее Node.js, работающий на движке JavaScript V8, зачастую обходит PHP в определённых сценариях. Как объясняется на RisingStack, главная причина в его неблокирующемся вводе-выводе и эффективной обработке параллельных подключений. В ситуациях, связанных с высокой конкурентностью и обработкой в реальном времени Node.js зачастую окажется более удачным выбором.
И PHP, и JS обладают обширной экосистемой, включающей множество библиотек. В масштабном сообществе PHP постоянно создаются новые библиотеки, фреймворки и инструменты, помогающие в процессе разработки. При этом Composer упрощает управление пакетами и зависимостями.
В свою очередь, JavaScript может похвастать реестром npm, предлагающим широкую коллекцию пакетов практически под любые нужды. И если экосистема PHP больше сосредоточена на веб-разработке, то в случае JS она оказывается шире и полноценно охватывает не только фронтенд, но и бэкенд. Это делает JS более гибким, но также повышает порог вхождения для тех, кто только начинает знакомство с этим языком.
Что касается синтаксиса и функциональных возможностей, то здесь PHP и JS значительно отличаются. PHP является очень зрелым языком с надёжным набором встроенных функций. За последние годы в него были внедрены современные возможности вроде подсказки типов при вводе, атрибутов и коротких стрелочных функций. JS же является более динамичным и гибким языком, предоставляющим такие возможности, как функции первого класса и асинхронное программирование. Однако обширное применение в этом языке обратных вызовов и промисов может выступать как его преимуществом, так и недостатком, поскольку позволяет использовать мощные парадигмы программирования, но также ведёт к созданию сложных вложенных структур кода, известных как «ад обратных вызовов». Как бы то ни было, внедрение функционала
async/await
помогло противостоять этой проблеме.Рассматривая плюсы и минусы каждого из этих языков, важно оценивать их пригодность для конкретного случая. PHP зачастую лучше подойдёт для традиционных веб-приложений, систем управления контентом (например, WordPress, Drupal, Joomla) и платформ электронной коммерции (например, Magento, WooCommerce, PrestaShop). Простота и лёгкость освоения этого языка делают его прекрасным выбором для людей, только входящих в сферу веб-разработки.
С другой стороны, предлагаемые JS инструменты бэкенда вроде Node.js больше подходят для приложений реального времени (например, чатов и онлайн-игр), одностраничников (SPA, Single Page Applications) и проектов, требующих единообразного языка для фронтенда и бэкенда. Node.js прекрасно подходит в ситуациях, где приложению требуется обрабатывать множество одновременных подключений и неблокирующиеся операции ввода-вывода.
Изображение взято с Funny Developer
Так заслуживает ли PHP места среди множества других решений для бэкенда?
За свою жизнь PHP очень хорошо развился. Он впитал в себя современные практики программирования, повысил быстродействие и обрёл ряд мощных возможностей. Несмотря на свои проблемы с легаси-проектами и устаревшими практиками, PHP продолжает оставаться популярным решением для веб-разработки, лежащим в основе значительной доли сайтов интернета. Простота, низкий порог вхождения и обширная экосистема делают этот язык привлекательным выбором для разработчиков любого уровня.
При этом со стороны JS в качестве сильных соперников на поприще веб-разработки возникли такие инструменты, как Node.js. Эти решения отличаются высокой производительностью в определённых сценариях, разносторонней экосистемой и единообразием языка для фронтенд- и бэкенд-составляющих. И хотя освоить JS сложнее, высокая гибкость и мощные возможности делают этот язык привлекательным выбором для широкого спектра приложений.
Итак, достоин ли PHP рассмотрения наряду со множеством других технологий для бэкенд-разработки? Ответ будет зависеть от конкретных нужд проекта, ваших навыков работы с языками и вида создаваемого продукта. PHP по-прежнему заслуживает внимания при разработке традиционных веб-приложений, систем управления контентом и платформ электронной коммерции. При этом серверные инструменты JS отличаются эффективностью в приложениях реального времени, одностраничных приложениях и сценариях, связанных с высокой конкурентностью и неблокирующимися операциями ввода-вывода.
В конечном счёте решение сводится к оценке компромиссов, преимуществ и недостатков каждого языка в контексте вашего проекта. Благодаря продолжающейся разработке и поддержке со стороны основной команды PHP продолжает оставаться актуальным выбором для веб-приложений, даже среди разрастающегося ландшафта новых технологий для бэкенда.