Вышел новый релиз PHP 8.4: обзор ключевых изменений

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Вышел PHP 8.4: что изменилось и почему это важно

Сообщество разработчиков встретило долгожданный релиз PHP 8.4 — новую мажорную версию одного из самых популярных языков веб-программирования. Обновление принесло ряд значительных улучшений, включая долгожданные property hooks, асимметричную видимость и существенную оптимизацию производительности. Разберём ключевые изменения, которые стоит знать каждому PHP-разработчику.

1. Property Hooks (Хуки свойств)

Самое громкое нововведение — возможность определять геттеры и сеттеры прямо в объявлении свойства класса без написания отдельных методов. Это радикально упрощает работу с вычисляемыми или валидируемыми полями.

class User
{
    public string $name {
        set => $this->name = trim($value);
        get => ucfirst($this->name);
    }
}

Раньше для такой логики приходилось писать отдельные методы getName() и setName(). Property hooks делают код чище и читаемее.

2. Асимметричная видимость

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

class Post
{
    public private(set) string $title;
}

Это избавляет от необходимости создавать геттеры и сеттеры только ради контроля доступа, сохраняя инкапсуляцию.

3. Улучшенный JIT и производительность

В PHP 8.4 значительно переработан JIT-компилятор (Just-In-Time). Разработчики ядра улучшили эвристику принятия решений о компиляции и сократили накладные расходы при выполнении горячих путей кода. По предварительным тестам, прирост производительности в синтетических бенчмарках составляет от 10% до 25% по сравнению с PHP 8.3.

  • Ускорение работы циклов и рекурсивных функций
  • Улучшенная обработка больших массивов
  • Снижение потребления памяти в JIT-режиме до 15%

4. Новый синтаксис: деструктуризация массивов с типами

Добавлена возможность указывать типы при деструктуризации массивов:

[$name, $age] = ['Иван', 30]; // было
[ string $name, int $age ] = ['Иван', 30]; // стало

Это повышает статический анализ и делает код самодокументируемым.

5. Изменения в стандартной библиотеке

  • Новые функции: array_find(), array_find_key(), array_any() и array_all() — для более лаконичной работы с массивами.
  • Обновление PCRE2: библиотека регулярных выражений обновлена до версии 10.44, что исправляет ряд редких ошибок.
  • Устаревшие функции: объявлены устаревшими session_set_cookie_params() (в пользу ini_set()) и несколько внутренних функций.

6. Статус устаревания (Deprecations)

В PHP 8.4 помечены как устаревшие:

  • Изменение типа возвращаемого значения через #[\ReturnTypeWillChange] — теперь требуется явное объявление.
  • Вызов isset() на не-массивах (например

Рекомендуем библотеки