Язык программирования PHP: от истоков до современности
Ему ежегодно пророчили исчезновение из-за невостребованности. Но спустя годы он по-прежнему остаётся в топе языков для веб-разработки.
Иллюстрация: Polina Vari для Skillbox Media
PHP — интерпретируемый скриптовый язык программирования общего назначения. Название представляет собой рекурсивный акроним PHP: Hypertext Preprocessor (PHP: предварительный обработчик гипертекста), но изначально оно расшифровывалось как Personal Home Page Tools (Инструменты для создания персональных веб-страниц).
За более чем 20 лет PHP прошёл путь от простого набора скриптов до полноценного языка веб-программирования и стабильно входит в топ-10 популярных языков по версии TIOBE.
PHP: что это за язык программирования и почему он так популярен
PHP создали специально для разработки веб-страниц. На нём можно делать ресурсы любой сложности: от простого лендинга до социальной сети — именно на PHP написана «ВКонтакте». Код на PHP легко встраивается в классический HTML — нужно всего лишь добавить соответствующий тег. Язык поддерживают все популярные операционные системы: Windows, macOS, Linux, UNIX и не только.
А ещё PHP позволяет работать с такими веб-серверами, как IIS в Windows и Apache в macOS и Linux. Благодаря такой широкой совместимости у разработчиков практически нет ограничений в выборе веб-сервера и операционной системы.
Читайте также:
Отцом самого популярного языка веб-программирования считается датский программист Расмус Лердорф. В 1994 году он создал набор скриптов на языке Perl — ту самую «персональную домашнюю страницу», которая легла в основу PHP.
Со временем к работе над языком подключились программисты со всего мира. PHP — один из старейших языков, который разрабатывается силами сообщества по модели open source. Сейчас его поддерживает и разрабатывает группа энтузиастов во главе с компанией Zend Technologies. Компанией руководят Зеев Сураски и Энди Гутманс, в 1997 году выпустившие третью версию PHP.
Познакомимся с основными особенностями языка.
Первое свойство языка PHP: интерпретируемость
В отличие от Java, код на котором компилируется, а затем запускается в работу, PHP-код создаётся во время обращения к PHP. Человек открывает сайт, на сервер посылается запрос, и в это время компилируется код. Каждый скрипт компилируется в реальном времени, а затем выполняется.
Приведём пример кода:
Благодаря этому свойству PHP — очень гибкий язык. Например, Java-программист вводит название класса один раз — теперь оно неизменно. PHP же компилируется в рантайме, и можно подставить любое название класса из переменной.
Что такое рантайм?
Время жизни программ, написанных на языках вроде C, C++ и Java, можно представить в виде двух последовательных этапов: compile time (компиляция) и runtime (выполнение). Сначала все инструкции на языке переводятся в единицы и нули — это двоичный код, с которым умеет работать компьютер. Затем компьютер выполняет каждую команду — это и есть рантайм. В C, C++ и Rust этапы компиляции и выполнения явно разделены, поэтому их называют компилируемыми языками.
А вот в PHP и JavaScript эти процессы совмещены: как только инструкцию перевели в машинный код, она сразу же выполняется — отдельного этапа компиляции всего кода нет. Такие языки называют интерпретируемыми.
Однако ради гибкости разработчики жертвуют скоростью работы сайта. В случае с Java программу собирают один раз, а затем запускают. В случае с PHP приходится тратить время пользователя на процесс компиляции кода.
Второе свойство языка PHP: слабая динамическая типизация
В языках программирования тип — это набор значений, которые может иметь переменная, и операций, которые с этими значениями можно осуществлять.
В разных языках программирования типы ведут себя по-разному. Поэтому выделяют несколько видов типизации:
- по времени определения типа — статическая и динамическая типизация;
- по постоянству множества значений — слабая и сильная типизация.
В языках со статической типизацией тип переменной определяется на этапе компиляции и не может изменяться в течение работы программы. Программист явно указывает тип переменных с помощью служебных слов: если это число, пишет int, если строка — string.
В языках с динамической типизацией переменная за время работы программы может быть числом, строкой, массивом, объектом — чем угодно. Интерпретатор не будет «ругаться» и сам определит тип обрабатываемых данных по контексту (например, по виду операции).
С одной стороны, динамическая типизация позволяет разработчику не заботиться о соблюдении типов, а с другой — приводит к труднораспознаваемым логическим ошибкам. Кроме того, из-за динамической типизации программы работают медленнее и потребляют больше оперативной памяти.
Сравнение версий языка программирования PHP: от первой до седьмой
Версии с первой по третью были сырыми и обладали минимальным набором возможностей, хотя для создания простых сайтов их хватало. Разработчики сетовали на то, что нелогичность расположения параметров в функциях стандартной библиотеки усложняет работу.
Но с версии 5.4 PHP превратился в отлаженную технологию, а релизы 5.5 и 5.6 закрепили успех языка. Все версии отлично себя показали и оказались хорошо защищены от SQL-инъекций и взлома. Шестую версию пропустили: она должна была поддерживать Unicode на уровне ядра, но релиз не состоялся.
«PHP 6 был амбициозным, но отстойным. Вот почему мы занялись PHP 7, в процессе пропустив шестую версию».
Вильсон Дюка,
веб-разработчик.
Седьмая версия считается революционной в плане скорости. Версия 5.6 медленно работала с массивами и вообще с переменными: обработка статически нетипизированных данных занимала много времени. Строка обрабатывалась в 60 раз медленнее, чем на C#. Это не бросается в глаза — речь о долях секунды. Но когда у тебя миллиард пользователей, как у «Фейсбука»*, скорость критична.
HipHop и прорыв в скорости
«Фейсбук»* написан на PHP — и с ростом количества пользователей это стало настоящей проблемой. Чтобы её решить, программисты создали для пятой версии собственный интерпретатор языка. Они изначально компилировали его в промежуточный код, а затем отправляли в обычный интерпретатор Zend Engine. Программисты «Фейсбука»* ввели статическую типизацию и ускорили работу языка в два раза. Это стало настоящим прорывом. Транслятор назвали HHVM, или HPHP Compiler — «HipHop для языка PHP».
Но команда разработки PHP плотно занялась массивами. Итогом стала седьмая версия, которая работала быстрее HHVM. При этом статической типизации в седьмой версии по-прежнему почти нет. Её можно найти только в параметрах функции — но этого так мало, что можно считать, будто её нет совсем.
Каждая новая версия языка, начиная с 7.0, работает быстрее предыдущей — разница видна по замерам:
PHP 8: что нового
PHP постоянно развивается, поэтому мы обновили статью 2 ноября 2022 года.
В 2020 году вышла версия PHP 8, и веб-разработчики встретили её тепло. В PHP 8 внедрили JIT-компиляцию: по данным сообщества, она ускоряет работу веб-приложений в три раза. Появились именованные параметры и лаконичный оператор выбора match, пришедший на замену switch. А ещё заметно повысилась безопасность: например, добавили оператор nullsafe, который прекращает работу цепочки методов, если один из них вернул null.
Читайте также:
Затем, в 2021 году, вышло обновление 8.1. Одной из главных фич релиза стал долгожданный тип enum — раньше в качестве замены перечислениям разработчики создавали классы с набором констант. Добавили readonly-свойства, которые работают как get-методы, но выглядят лаконичнее. С полным списком нововведений можно ознакомиться на официальном сайте PHP.
Релиз PHP 8.2 запланирован на 24 ноября 2022 года. В обновление планируют добавить readonly-классы, улучшенный генератор псевдослучайных чисел и множество других небольших фич, которые позволят писать более безопасный и лаконичный код. Тестовая версия уже доступна для скачивания.
Для чего используют PHP
Единственная сфера применения — веб-разработка. На PHP невозможно сделать десктопные приложения, он не используется в мобильной разработке — только веб. Но сегодня эта область огромна. Даже некоторые десктопные приложения уходят в веб — тот же Microsoft Office имеет облачный сервис. Ранее считалось, что PHP не подходит для больших высоконагруженных проектов, но опыт «Фейсбука»* доказывает обратное. «Авито» — ещё один пример удачной реализации.
Подробнее о практическом применении языка программирования читайте в нашей статье «Для чего используют PHP и почему его ненавидят».
С чего начать изучение
PHP легко изучить самостоятельно — у него низкий порог входа. Буквально за вечер можно прочитать документацию и написать скрипт, который будет возвращать данные на сайт. Другие языки (C#, Java) имеют более высокий порог вхождения, и одного дня, чтобы создать работающий код, мало. Сегодня на российском рынке труда из-за низкого порога входа много PHP-кодеров, и большинство — невысокого уровня.
Хороший разработчик PHP фактически применяет те же паттерны программирования, что и в статически типизированных языках. На PHP даже сложнее программировать, и вот почему. Если в Java или C# допустить алгоритмическую ошибку — например, присвоить переменной не тот тип, — они «дадут по рукам». PHP же это пропустит, и программист сломает голову: что не так? Ведь всё работает, но неправильно. Из-за этого на современном рынке хорошим PHP-программистам готовы платить не меньше, чем другим разработчикам. Но хорошего специалиста сложно найти.
Чтобы учить язык, нужно задать себе вопрос: «Для чего он мне?» Учить ради процесса учёбы бесполезно, без практического применения знания забудутся. Нужно поставить конкретную задачу и искать решение.
* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности».