PHP 25 лет: почему он именно такой и что с ним будет — рассказывает создатель языка

1

О себе (00:00 — 02:20)

На сцене создатель PHP, Расмус Лердорф.

00:00 Короткое представление. Родился в 60-х в Гренландии. Несколько слайдов из семейного фотоархива.

01:25 Начало работы с компьютерами. Ретроспектива.

2

Начало пути (02:21 — 08:43)

02:21 Октябрь 1994. Выход браузера Mosaic, начало отсчёта.

02:54 API для C. С появлением графических браузеров встала проблема с реализацией CGI. HTML-код внедрялся напрямую в программы на C или Perl. Было желание это изменить и писать HTML со вставками кода, реализующими какую-то логику. Первый прототип предлагал вставлять в HTML «теги» — функции, написанные на C. Однако проблема оказалась в том, что никто не хотел писать функции на C.

06:53 Создание языка. Существовавшая система шаблонов была слишком примитивной. Она представляла собой машину состояний и не могла обрабатывать простейшие математические функции. В то же время именно простота системы делала её привлекательной.

3

Ключевые моменты развития PHP (08:44 — 16:26)

08:44 Четыре базиса эффективной системы. Работоспособность системы определяется взаимодействием четырёх компонентов: операционной системы, веб-сервера, языка скриптов и базы данных. Именно эти четыре элемента отражены в акрониме LAMP.

09:19 Интеграция PHP с Apache. Шаг, значительно увеличивший быстродействие системы. Хотя другие языки были значительно быстрее, проблема была в том, что они сами выступали в роли CGI. Впоследствии Apache получил встроенную поддержку Perl, но из-за нюансов работы модуля mod_perl было невозможно запускать его в качестве виртуального хоста на одной машине с другими виртуальными хостами. PHP позволял делать это.

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

12:17 Многопоточность. По мнению создателя PHP, многопоточность делает систему менее стабильной, ошибка в одном из потоков приводит к падению всего комплекса.

13:55 Базы данных. MSQL, предок MySQL, был идеален для небольших веб-приложений. Однако он не предусматривал ограничение на количество возвращаемых строк. Придумана директива LIMIT в SQL. ANSI SQL до сих пор не предусматривает ограничение на количество строк, но теперь есть в каждой СУБД. Были введены max_execution_time, memory_limit и safe mode ради большей привлекательности PHP для ISP-провайдеров.

4

Не баги, а фичи, или Почему я сделал именно так (16:27 — 26:43)

16:27 Игнорирование регистра в именах функций. Во время бурного развития HTML разработчики не могли определиться со стилем написания тегов, поэтому имена функций должны были подходить к любому стилю.

19:04 Переменная $Globals. Введена для того, чтобы избежать конфликтов имён глобальных переменных в разных модулях кода.

22:20 Директива register_globals. Упрощённая инициализация переменных делала веб-разработку более доступной.

23:22 magic_quotes. На самом деле автоматическое экранирование появилось для единоразового упрощения разработки. Лердорф ввёл его для собственного удобства и не ожидал, что его будут использовать другие.

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

Статья по теме: Почему многие программисты считают PHP плохим языком? — отвечают эксперты

5

PHP 7.3 — что новенького (26:44 — 41:34)

26:44 Новые фичи в PHP 7.3. Heredoc стал более гибким, введено предупреждение о continue в switch, упрощённый синтаксис list теперь поддерживает ссылки, добавлена поддержка ведущей запятой в вызове функции. Добавлена новая функция Monotonic Timer, не привязанная к системным часам. Ещё одна новая функция, fpm_get_status(), пригодится для создания панели мониторинга вроде Apache Scoreboard. is_countable() позволит определить, является ли объект массивом или реализует Countable интерфейс. array_key_first и array_key_last возвращают первый и последний ключ массива.

31:20 Возможная несовместимость со старыми версиями PHP. PCRE 2 будет выдавать ошибку при обработке недопустимых символов. В отличие от PCRE 1, это прервёт выполнение кода. Ошибку легко отследить в логе.

34:02 DCE. В PHP 7.3 улучшена функция отслеживания и удаления ненужного кода. Оптимизатор научился работать с массивами и прослеживать возможные эффекты, выходящие за рамки обрабатываемой функции.

39:40 Сравнительный анализ быстродействия различных версий PHP на примере WordPress 4.9.8 показывает стабильный рост скорости. Анализ использования памяти на примере WordPress 4.3 отражает большую эффективность использования ОЗУ. С января 2018 осуществляется поддержка PHP версии от 7.1 и выше. Для более ранних версий не выпускаются даже обновления безопасности, и их использование довольно безответственно, особенно если проект работает с личными данными.

6

Дополнительные инструменты (41:35 — 50:05)

41:35 Статический анализ. ПО для статического анализа своего кода можно найти на github.com/phan/phan. Инструмент проводит огромное количество проверок, при этом фильтры ошибок настраиваются, чтобы можно было отделить критические от менее важных.

44:26 PHPSPY. Инструмент для мониторинга, который можно прикрепить к любому процессу. PHPSPY будет с определённой периодичностью формировать отчёт о текущем состоянии процесса. Можно проверить состояние памяти, отследить переменные и их изменения, при этом работа основного процесса не замедляется. Инструмент находится на стадии разработки, поучаствовать в которой приглашают всех желающих.

7

Планы на будущее (50:06 — 1:01:24)

50:06 Фичи PHP 7.4. Типизированные свойства увеличат производительность системы. Введены стрелочные функции, позволяющие упростить код. Появилась возможность чёткого определения сериализации и десериализации классов. Вводится нулевой оператор слияния, появляются слабые ссылки. Предзагрузка OpCache позволяет несколько ускорить работу благодаря предварительной загрузке классов. Кроме того, появится интерфейс внешних функций, благодаря которому можно будет использовать код на С прямо в PHP-коде. Последние две технологии отлично сочетаются. FFI работает медленно, если осуществляет загрузку внешних функций по запросу, однако предзагрузка позволяет кэшировать данные и обеспечивает к ним быстрый доступ.

8

Почему я всё ещё в деле (1:01:25 — 1:11:49)

1:01:25 Не про PHP. Слайды из личного фотоархива, happy memories и т.д.

1:04:58 Цунами в Индийском океане в декабре 2004 года. Появление проекта Sahana. Хотя PHP постоянно подвергается критике за несовершенство и неочевидные решения, этот проект, созданный с помощью PHP и спасающий человеческие жизни, вдохновил Лердорфа на дальнейшее развитие языка.

1:07:56 Мотивационная речь.

Статья по теме: Хочу научиться программировать на PHP. С чего начать?

Хинт для программистов: если зарегистрироваться на соревнования Huawei Honor Cup, бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании. Перейти к регистрации.