Вышел 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()на не-массивах (например