Загрузка...

PHP 8.5: что нового и как не сломать свой код

Обзор ключевых изменений, потенциальных ловушек и шагов к безопасной миграции
php 8.5

Ноябрь 2025 года — дата релиза PHP 8.5. Уже можно качать беты и смотреть, что поменялось. И да, кое-что сломается. Но не так страшно, если готовиться заранее. Вот обзор нововведений:

Pipe-оператор: “труба” мечты

В PHP наконец-то завезли pipe-оператор |>.
Теперь можно писать не вот это вот чудо:

$result = strtolower(trim($value));

А вот так:

$result = $value
    |> trim(...)
    |> strtolower(...);

Красиво, читаемо, “как у людей”.
Да, JavaScript-щики теперь могут перестать хихикать, что у них есть пайпы, а у нас нет.


Array First / Last: конец reset() и end()

Все мы хоть раз писали:

$first = reset($arr);
$last = end($arr);

И потом ругались, что это ещё и внутренний указатель двигает.
Теперь есть array_first() и array_last().
Просто берём и достаём — никаких сайд-эффектов.


Ошибки с “человеческим лицом”

Фаталка? Раньше это был чёрный экран отчаяния.
Теперь будет стек вызовов.
То есть хотя бы понятно, где всё сгорело, и можно не тратить полдня на гадание.


#[\NoDiscard]: “не игнорируй меня”

Иногда пишешь функцию, а кто-то вызывает её ради сайд-эффекта и не сохраняет результат.
Теперь можно пометить метод атрибутом #[\NoDiscard], и если кто-то проигнорирует return — будет предупреждение.

Пример:

#[\NoDiscard]
function saveUser(User $u): bool {
    // ...
}

Игнорируешь результат? Лови warning.
PHP стал строгим, как мама, когда ты не доел суп.


Directory стал взрослым

Раньше Directory был “объект, который вроде как можно трогать руками”.
Можно было new Directory(), клонировать, сериализовать, творить магию.

Теперь — нет.
Directory стал opaque-объектом: как чёрный ящик.
Только открывать, читать, закрывать.
Всё, конец шаманству.


Финальные свойства прямо из конструктора

Теперь можно делать:

class User {
    public function __construct(
        public final string $id,
        public string $name,
    ) {}
}

Да, final теперь работает и для property promotion.
Наконец-то можно не бояться, что кто-то переопределит то, что переопределять нельзя.


Атрибуты везде

Константы теперь тоже можно украшать атрибутами.
Да, наконец-то у нас “декорированные константы”.

class Config {
    #[Env("APP_ENV")]
    public const ENV = 'production';
}

Красиво, удобно, метаданные — прямо на константах.


Ассиметричная видимость: строгий доступ

Теперь статические свойства могут иметь разные правила для чтения и записи.

class App {
    public private(set) static int $counter = 0;
}

Читать можно откуда угодно, а писать — только изнутри.
Прямо как “смотреть можно, трогать нельзя”.


CHIPS и печеньки

PHP 8.5 подтянулся к новым стандартам браузеров — завезли поддержку CHIPS (partitioned cookies).
Если коротко: теперь cookie могут быть разделены по сайтам, меньше утечек и трекеров.
Для разработчиков веба это значит — больше безопасности, меньше хаоса.


OPcache теперь “встроенный”

Больше не надо думать “включён ли у нас OPcache на проде?”.
В PHP 8.5 он встроен прямо в ядро.
То есть он всегда с вами.
Как чайник на кухне — можно не спрашивать, где он, просто есть.


Unicode наконец-то по уму

Новые функции для работы с графемами (например, grapheme_levenshtein) означают, что сравнивать строки вроде “👩‍👩‍👧‍👦” и “👨‍👩‍👧‍👦” теперь можно нормально.
Пора прощаться с костылями и велосипедами.


php 8.5

Что может поломаться

  • Если вы создавали Directory вручную — придётся переписать.
  • Если любили игнорировать результаты функций — готовьтесь к ворнингам.
  • Если наследуете свойства как бог на душу положит — теперь строже.
  • Старые хаки с Unicode могут уехать в закат.

В общем, магия и костыли будут болеть первыми.


Как подготовиться

  1. Поставьте PHP 8.5 beta на тестовый сервер.
    Пусть проект полежит на ней и посмотрит, где хрустит.
  2. Включите строгие линтеры.
    PHPStan, Psalm — в помощь.
  3. Перепишите старьё.
    • замените reset()/end() на array_first()/array_last(),
    • уберите шаманство с Directory,
    • начните использовать pipe-оператор (и радуйтесь).
  4. Прогоните тесты.
    Чем больше покрытие, тем меньше сюрпризов.
  5. Канареечный деплой.
    Не кидайте весь продакшен сразу на 8.5. Дайте половине сервера обжечься первой.

Итог

PHP 8.5 — это не “снова всё сломалось”, а скорее “стало удобнее, чище и логичнее”.
Да, кое-где придётся подчистить код, но взамен:

  • код читается легче,
  • ошибок меньше,
  • жизнь без костылей становится реальнее.

В общем, апдейт дружелюбный.
Смело ставьте себе в план — и встречайте ноябрь с хорошим настроением.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *