Статистика версий PHP: Январь, 2025

Использование PHP в январе 2025 года. Дважды в год я пишу обновлённую информацию об использовании версий PHP в сообществе.

Предыдущий выпуск можно прочитать в статье «Статистика версий PHP: Июль, 2024», но в эту статью я также включу исторические данные.

Как всегда, я работаю с имеющимися данными: эти диаграммы не являются 100% точным представлением PHP сообщества в целом, но они точно отражают одну из наиболее заметных частей PHP — экосистему packagist.

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

Статистика использования PHP

Для начала рассмотрим процентное соотношение используемых сегодня версий PHP. Я опустил все версии, используемые не более чем на 1%:

Версия 2023-07 2024-01 2024-07 2024-07
7.2 4.3% 2.5% 2.0% 1.6%
7.3 4.2% 3.2% 1.9% 1.5%
7.4 19.9% 13.6% 10.2% 7.6%
8.0 12.3% 7.2% 5.4% 3.4%
8.1 39.3% 35.2% 26.1% 18.1%
8.2 17.2% 29.4% 32.3% 28.6%
8.3 0.2% 6.4% 19.9% 32.7%
8.4 0.0% 0.0% 0.0% 5.1%

Визуализация этих данных выглядит так:

Эволюция использования версий PHP
Эволюция использования версий PHP

Начиная с PHP 8.1, я начал делать эти посты в январе и июле. Я намеренно выбрал эти месяцы, потому что к январю новейшему релизу PHP уже около месяца, и мне кажется интересным, сколько среди них ранних последователей. Поэтому давайте сравним использование PHP 8.1 за первый месяц:

Версия Использование за первый месяц
8.1 9.1%
8.2 4.7%
8.3 6.4%
8.4 5.1%

PHP 8.4 демонстрирует не самые лучшие, но и не самые худшие результаты. Логично, что релиз PHP *.1 быстрее внедряется, так как он обычно устраняет все недостатки предыдущего релиза *.0. Я немного удивлён тем, что 8.3 занял второе место: это был довольно скучный релиз, в то время как 8.4 содержит гораздо больше интересных новых возможностей. С другой стороны, скука может быть причиной того, что люди быстрее обновляются.

Наконец, давайте соберём все данные в один большой график, начинающийся с PHP 5.3 в 2013 году:

Эволюция на протяжении времени
Эволюция на протяжении времени

Требуемые версии PHP

Помимо данных Packagist, я также использую анализатор популярных пакетов Никиты Попова, загружающий 1000 самых популярных пакетов композитора. Я использую скрипт для сканирования этих пакетов и определения их минимальной требуемой версии PHP. Вот результаты:

Версия 2023-07 2024-01 2024-07 2025-01
5.2 7 7 5 5
5.3 65 58 50 52
5.4 31 28 26 26
5.5 21 16 15 15
5.6 32 30 29 31
7.0 24 24 24 25
7.1 125 100 93 101
7.2 133 123 118 123
7.3 56 49 42 45
7.4 97 87 80 81
8.0 144 126 123 128
8.1 107 154 184 194
8.2 94 135 153 171
8.3 0 4 4
8.4 0

Следует сделать два важных замечания.

  1. В таблице указана минимальная требуемая версия PHP. Это означает, что пакеты с минимальной версией PHP, например, 8.0, могут также поддерживать PHP 8.1, PHP 8.2, PHP 8.3 и PHP 8.4.
  2. Если посчитать цифры, то можно заметить, что между каждым годом есть некоторые различия. Не в каждом пакете указана корректная строка версии.

Проще всего представить эти данные в виде графика для относительного сравнения, чтобы можно было увидеть изменения с течением времени:

Минимальная требуемая версия PHP с течением времени
Минимальная требуемая версия PHP с течением времени

Похоже, что темпы внедрения новых версий PHP замедлились, хотя не стоит забывать, что это не обязательно плохо: пакеты, требующие php: ^8.0, будут автоматически поддерживать и PHP 8.4.

С другой стороны (этот аргумент я приводил уже много раз): Я считаю, что PHP сообщество только выиграет, если разработчики открытого исходного кода будут больше стремиться к обновлению новейших версий PHP. Сейчас наступило время, когда обновление стало как никогда простым благодаря таким инструментам автоматизации, как Rector; и поддержание проектов в актуальном состоянии на последней версии PHP только выигрывает (безопасность, производительность и новые возможности).

Я очень рад выходу PHP 8.4. Это один из самых значимых релизов в новейшей истории PHP, и мне нравится его использовать!

Комментарии


Дополнительные материалы

Предыдущая Статья

Кэширование аутентифицированных пользователей в Laravel

Следующая Статья

Несколько интересных вещей о @counter-style