PHP 8.4 вышел в ноябре 2024 года и принёс несколько изменений, которые заметно упрощают код. Ниже — то, что стоит попробовать сразу после обновления.
Property hooks
Геттеры и сеттеры теперь можно описывать прямо в объявлении свойства — без отдельных методов и без «магии» __get.
class User
{
public string $name {
set => trim($value);
}
public function __construct(
public string $firstName,
public string $lastName
) {
}
public string $fullName {
get => $this->firstName . ' ' . $this->lastName;
}
}
Асимметричная видимость
Свойство может быть доступно на чтение всем, а менять его — только изнутри класса:
class Order
{
public private(set) string $status = 'new';
public function pay(): void
{
$this->status = 'paid';
}
}
Новые функции для массивов
В ядро добавили array_find(), array_find_key(), array_any() и array_all(). Больше не нужно писать цикл ради проверки условия:
$products = [
['name' => 'Ноутбук', 'price' => 90000],
['name' => 'Мышь', 'price' => 2500],
];
$cheap = array_find($products, fn ($p) => $p['price'] < 5000);
$hasExpensive = array_any($products, fn ($p) => $p['price'] > 50000);
Что проверить перед обновлением
- Неявно nullable-параметры (
function f(string $x = null)) объявлены устаревшими — замените на?string $x = null. - Проверьте зависимости: часть библиотек ещё не поддерживает 8.4.
- Прогоните тесты и статический анализ — особенно если используются динамические свойства.
Если проект на 8.1–8.3, обновление обычно занимает меньше часа: основные проблемы — устаревшие сигнатуры и старые пакеты.