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, обновление обычно занимает меньше часа: основные проблемы — устаревшие сигнатуры и старые пакеты.