Що нового в PHP 8.5: огляд головних функцій та оновлень

Перекладено ШІ 0 stitcher.io 30 липня, 2026

PHP 8.5 додає довгоочікуваний Pipe operator та вбудовані функції для масивів, які роблять синтаксис мови значно чистішим. Розповідаємо про головні нововведення релізу, що допоможуть оптимізувати ваш код на Laravel.

Реліз PHP 8.5 відбувся 20 листопада 2025 року. Нова версія принесла оператор Pipe, конструкцію clone with, оновлений URI-парсер та низку інших покращень.


Оператор Pipe

PHP 8.5 представляє оператор Pipe, який значно спрощує передачу результату однієї функції в іншу. Замість складних вкладених викликів:

$input = ' Some kind of string. ';

$output = strtolower(
    str_replace(['.', '/', '…'], '',
        str_replace(' ', '-',
            trim($input)
        )
    )
);

Тепер можна використовувати чистіший синтаксис:

$output = $input
    |> trim(...)
    |> (fn (string $string) => str_replace(' ', '-', $string))
    |> (fn (string $string) => str_replace(['.', '/', '…'], '', $string))
    |> strtolower(...);

Більше деталей про роботу нового оператора читайте у детальному огляді.


Clone with

З'явилася можливість призначати нові значення властивостям об’єкта безпосередньо під час його клонування:

final class Book
{
    public function __construct(
        public string $title,
        public string $description,
    ) {}

    public function withTitle(string $title): self
    {
        return clone($this, [
            'title' => $title,
        ]);
    }
}

Це корисне нововведення, хоча воно має обмеження: конструкція не працює з readonly властивостями ззовні класу. Для цього доведеться змінити доступ на public(set).


Каст (void) та атрибут #[NoDiscard]

Тепер функцію можна позначити атрибутом #[NoDiscard]. Це означає, що її результат обов'язково має бути використаний. Якщо результат ігнорується, PHP видасть попередження.

#[NoDiscard("Результат цієї функції є критично важливим.")]
function foo(): string {
    return 'hi';
}

// Попередження:
// The return value of function foo() is expected to be consumed...
foo();

// Коректне використання:
$string = foo();

Попередження можна приглушити за допомогою нового касту (void):

(void) foo();

Покращення Closures

Closures та first-class callables тепер можна використовувати у константних виразах. Це дозволяє, наприклад, визначати анонімні функції прямо в атрибутах:

#[SkipDiscovery(static function (Container $container): bool {
    return ! $container->get(Application::class) instanceof ConsoleApplication;
})]
final class BlogPostEventHandlers
{ /* … */ }

Такі Closures повинні бути чітко позначені як static, оскільки вони не мають доступу до $this або зовнішніх змінних через use.


Backtraces для фатальних помилок

Маленька, але надзвичайно корисна зміна: тепер фатальні помилки міститимуть стек викликів (backtrace), що значно полегшує дебаг.

Fatal error: Maximum execution time of 1 second exceeded in example.php on line 6
Stack trace:
#0 example.php(6): usleep(100000)
#1 example.php(7): recurse()
...
#11 {main}

Функції array_first() та array_last()

Після появи array_key_first() у PHP 7.3, ми нарешті отримали вбудовані функції для отримання значень першого та останнього елементів масиву. Замість громіздких конструкцій:

$first = $array[array_key_first($array)] ?? null;

Тепер достатньо написати:

$first = array_first($array);

Парсинг URI

Нова реалізація URI дозволяє зручніше працювати з компонентами адрес:

use Uri\Rfc3986\Uri;

$uri = new Uri('https://tempestphp.com/2.x/getting-started/introduction');

$uri->getHost();
$uri->getScheme();
$uri->getPort();

Атрибут #[DelayedTargetValidation]

Деякі вбудовані атрибути (як-от #[Override]) валідуються під час компіляції. Новий атрибут #[DelayedTargetValidation] дозволяє відкласти цю перевірку до моменту виконання (runtime). Це важливо для підтримки зворотної сумісності.


Інші зміни

  • Підтримка Asymmetric visibility для статичних властивостей.
  • Атрибути для констант, визначених поза класами.
  • Constructor property promotion для final властивостей.
  • Можливість застосовувати #[Override] до властивостей.
  • Додано Dom\Element::$outerHTML.
  • Розширення Exif тепер підтримує формати HEIF та HEIC.
  • Новий прапор FILTER_THROW_ON_FAILURE для filter_var().

Застарілі функції та зміни, що порушують сумісність

  • Нестандартні імена кастів, як-от (boolean) та (integer), оголошені застарілими (використовуйте bool та int).
  • Використання зворотних лапок (backticks) як аліасу для shell_exec() є застарілим.
  • Переоголошення констант тепер вважається застарілим.
  • Видалено налаштування disabled_classes в ini-файлі.

Це основні нововведення PHP 8.5. Повний список усіх змін доступний за цим посиланням.

Що ви думаєте про PHP 8.5? Діліться своїми думками у коментарях!

Популярні

Інше, що варто прочитати

27 Оновлено 26 червня, 2026

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

16 Оновлено 26 червня, 2026

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

19 Оновлено 26 червня, 2026

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!