PHP 8.1 – велике оновлення PHP.
Воно містить безліч нових можливостей, включаючи перерахування, readonly-властивості, callback-функції як об'єкти першого класу, файбери, перетин типів, поліпшення продуктивності та багато іншого.
Перечислення 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, відвідайте сторінку Downloads. Бінарні файли Windows знаходяться на сайті PHP for Windows. Список змін - на сторінці ChangeLog
Руководство по міграции у розділі документації. Ознайомтеся з ним, щоб дізнатися про всі нові можливості та зміни, що стосуються зворотної сумісності.