PHP 8.1 – велике оновлення PHP.

Воно містить безліч нових можливостей, включаючи перерахування, readonly-властивості, callback-функції як об'єкти першого класу, файбери, перетин типів, поліпшення продуктивності та багато іншого.

Переходьте на PHP 8.1!

Перечислення RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Використовуйте переліки замість набору констант, щоб валідувати їх автоматично під час виконання коду.

Readonly-свойства RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Readonly-властивості не можна змінити після ініціалізації (тобто коли їм було надано значення). Вони будуть дуже корисні при реалізації об'єктів типу Value Object та Data Transfer Object.

Callback-функції як об'єкти першого класу RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

За допомогою нового синтаксису будь-яка функція може бути об'єктом першого класу. Тим самим вона розглядатиметься як звичайне значення, яке можна, наприклад, зберегти в змінну.

Розширена ініціалізація об'єктів RFC

PHP < 8.1

Loading...

PHP 8.1

Loading...

Об'єкти тепер можна використовувати як значення параметрів за умовчанням, статичних змінних і глобальних констант, а також в аргументах атрибутів.

У такий спосіб з'явилася можливість використання вкладених атрибутів

PHP < 8.1

Loading...

PHP 8.1

Loading...

Перетин типов RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Тепер в оголошенні типів параметрів можна вказати, що значення має стосуватися кількох типів одночасно.

В даний момент перетину типів не можна використовувати разом з об'єднаними типами, наприклад, A&B|C

Тип значення, що повертається never RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Функція чи метод, оголошені з типом never, вказують на те, що вони не повернуть значення або викинуть виняток, або завершать виконання скрипту за допомогою виклику функції die() exit() trigger_error() або чимось подібним.

Остаточні константи класу RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Тепер константи класу можна оголосити як остаточні, щоб їх не можна було перевизначити в дочірніх класах.

Явне вісімкове числове позначення RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Тепер можна записувати восьмеричні числа з явним префіксом 0o

Файбери RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

Файбери — це примітиви реалізації полегшеної невитіснюючої конкурентності. Вони є засобом створення блоків коду, які можна призупиняти та відновлювати, як генератори, але з будь-якої точки стека. Файбери власними силами не надають можливостей асинхронного виконання завдань, все одно має бути цикл обробки подій. Однак вони дозволяють блокуючим і неблокуючим реалізаціям використовувати один і той же API.

Файбери дозволяють позбавитися шаблонного коду, який раніше використовувався за допомогою Promise::then() чи корутин на основі генератора. Бібліотеки зазвичай створюють додаткові абстракції навколо файберів, тому немає потреби взаємодіяти безпосередньо з ними.

Підтримка розпакування масивів з рядковими ключами RFC Документація

PHP < 8.1

Loading...

PHP 8.1

Loading...

PHP раніше підтримував розпакування масивів за допомогою оператора ..., але тільки якщо масиви були з цілими ключами. Тепер можна розпаковувати масиви з рядковими ключами.

Поліпшення продуктивності

Час запросу демо Symfony 25 послідовних запусків за 250 запитами (сек) (Менше - краще)

Результат (относительно PHP 8.0) :

  • Прискорення демо Symfony на 23,0%
  • Прискорення WordPress на 3,5%

Функціональність з покращеною продуктивністю в PHP 8.1:

  • Бекенд JIT для ARM64 (AArch64).
  • Кеш успадкування (не потрібно зв'язувати класи кожного запиту).
  • Прискорено дозвіл імені класу (виключено перетворення регістру імені та пошук по хешу).
  • Поліпшення продуктивності timelib і ext/date
  • Поліпшення ітераторів файлової системи SPL.
  • Оптимизация функцийserialize() ``unserialize()
  • Оптимізація деяких внутрішніх функцій (get_declared_classes() explode() strtr() strnatcmp() dechex()
  • Покращення й виправлення JIT.

Нові класи, інтерфейси та функції

  • Доданий новий атрибут # [ReturnTypeWillChange]
  • Додані функції fsync і fdatasync
  • Добавлена новая функция array_is_list
  • Нові функції Sodium XChaCha20.

Застаріла функціональність та зміни у зворотній сумісності

  • Передача значення NULL параметрам вбудованих функцій, що не допускають значення NULL, оголошено застарілою.
  • Попередні типи значень, що повертаються у вбудованих методах класів PHP
  • Інтерфейс Serializable оголошено застарілим.
  • Функції кодування/декодування HTML-сутностей за умовчанням перетворюють одинарні лапки і замінюють неприпустимі символи на символ заміни Юнікоду.
  • Обмежено способи використання змінної $GLOBALS
  • Модуль MySQLi: режим помилок за замовчуванням встановлено на викидання виключення.
  • Неявне перетворення числа з плаваючою точкою до всього із втратою ненульової дробової частини оголошено застарілим.
  • Модуль finfo: ресурси file_info замінені на об'єкти finfo
  • Модуль IMAP: ресурси imap замінені на об'єкти IMAP\Connection
  • Модуль FTP: ресурси Connection замінені на об'єкти FTP\Connection
  • Модуль GD:Font identifiers замінені на об'єкти GdFont
  • Модуль LDAP: ресурси замінені на об'єкти LDAP\Connection LDAP\Result і LDAP\ResultEntry
  • Модуль PostgreSQL: ресурси замінені на об'єкти PgSql\Connection PgSql\Result і PgSql\Lob
  • Модуль Pspell: ресурси pspell pspell config замінені на об'єкти PSpell\Dictionary PSpell\Config

Вище продуктивність, краще синтаксис, надійніша система типів.

Переходьте на PHP 8.1!

Щоб завантажити вихідний код PHP 8.1, відвідайте сторінку Downloads. Бінарні файли Windows знаходяться на сайті PHP for Windows. Список змін - на сторінці ChangeLog

Руководство по міграции у розділі документації. Ознайомтеся з ним, щоб дізнатися про всі нові можливості та зміни, що стосуються зворотної сумісності.