Нова функціональність
Ядро PHP
Іменовані аргументи
Добавлена поддержкаіменованих аргументів
Атрибути
Добавлена поддержкаатрибутів
Оголошення властивостей у конструкторі
Добавлена поддержкавизначення властивостей у конструкторі (Оголошення властивостей у сигнатурі конструктора).
Об'єднання типів
Добавлена поддержкаоб'єднання типів
Вираз Match
Добавлена поддержкавирази match
Оператор Nullsafe
Добавлена поддержкаоператора Nullsafe ?->
Інші нові функції
-
Добавлен классWeakMap
-
Добавлен классValueError
-
Будь-яка кількість параметрів функції тепер може бути замінена варіативним аргументом за сумісності типів. Наприклад, тепер наступний код є допустимим:
Loading... -
static (як у "пізнім статичному зв'язуванні") тепер можна використовувати як тип, що повертається:
Loading... -
Тепер можна отримати ім'я класу об'єкта за допомогою
$object::class
. Результат такий самий, що йget_class($object)
-
new
іinstanceof
тепер можна використовувати з довільними виразами, використовуючиnew (expression)(...$args)
и$obj instanceof (expression)
-
Було внесено деякі виправлення узгодженості до синтаксису змінних, наприклад, тепер дозволено запис
Foo::BAR::$baz
-
Доданий інтерфейсStringable, який автоматично реалізується, якщо в класі визначено метод__toString()
-
Тепер трейти можуть визначити абстрактні закриті методи. Такі методи мають бути реалізовані класом за допомогою трейту.
-
throw
тепер можна використовувати як вираз. Це означає, що тепер можливе таке:Loading... -
У списках параметрів тепер дозволена необов'язкова завершальна кома.
Loading... -
Тепер можна написати
catch (Exception)
для перехоплення виключення, не зберігаючи їх у змінній. -
Додана підтримка типуmixed
-
Закриті методи, оголошені в батьківському класі, більше не застосовують жодних правил успадкування для методів дочірнього класу (за винятком остаточних закритих конструкторів). У наступному прикладі показано, які обмеження було знято:
Loading... -
Добавлена функцияget_resource_id(), яка повертає те саме значення, що і
(int) $resource
. Принцип роботи такий самий, але з більш зрозумілим API. -
Добавлен классInternalIterator
дата та час
-
Були доданіDateTime::createFromInterface() і DateTimeImmutable::createFromInterface()
-
Додано специфікатор формату DateTime
p
, Який аналогічнийP
, але повертаєZ
, а не+00:00
для UTC.
DOM
Додані DOMParentNode і DOMChildNode з новими API-інтерфейсами обходу та управління.
Фільтрування даних
FILTER_VALIDATE_BOOL
був доданий як псевдонім для FILTER_VALIDATE_BOOLEAN
. Нове ім'я є доцільним, оскільки воно використовує ім'я канонічного типу.
Enchant
Додані enchant_dict_add() enchant_dict_is_added()и**LIBENCHANT_VERSION
**
FPM
Добавлена новая опцияpm.status_listen
, що дає змогу отримувати статус з іншої кінцевої точки (наприклад, порту або файлу UDS). Це може стати в нагоді для отримання статусу, коли всі дочірні елементи зайняті обробкою довготривалих запитів.
Hash
Тепер об'єкти HashContext можна серіалізувати.
Функції інтернаціоналізації
Додані константи IntlDateFormatter::RELATIVE_FULL
IntlDateFormatter::RELATIVE_LONG
IntlDateFormatter::RELATIVE_MEDIUM
і IntlDateFormatter::RELATIVE_SHORT
LDAP
Добавлена функцияldap_count_references(), яка повертає кількість посилань у результатах пошуку.
OPcache
Якщо ini-параметр opcache.record_warnings включений, OPcache записуватиме попередження під час компіляції і відтворюватиме їх при наступному включенні, навіть якщо вони обслуговуються з кеша.
OpenSSL
Додано підтримку синтаксису криптографічних повідомлень (CMS) (» RFC 5652), що складається з функцій для шифрування, дешифрування, підпису, перевірки та читання. API схожий на API для функцій PKCS #7 з додаванням нових констант кодування: OPENSSL_ENCODING_DER
OPENSSL_ENCODING_SMIME
і OPENSSL_ENCODING_PEM
:
- openssl_cms_encrypt()шифрує повідомлення у файлі із сертифікатами та виводить результат у наданий файл.
- openssl_cms_decrypt()розшифровує повідомлення S/MIME у файлі та виводить результати у наданий файл.
- openssl_cms_read()експортує файл CMS до масиву сертифікатів PEM.
- openssl_cms_sign()підписує повідомлення MIME у файлі сертифікатом та ключем та виводить результат у наданий файл.
- openssl_cms_verify()перевіряє, що блок даних не пошкоджений, сторона, що підписує, є тим, ким вона є і повертає сертифікати сторін, що підписують.
Регулярні вирази (сумісні з Perl)
Добавлена функцияpreg_last_error_msg(), яка повертає людину читання повідомлення про останню помилку PCRE. Вона доповнює preg_last_error(), яка повертає ціле значення перерахування.
Reflection
-
Наступні методи тепер можуть повертати інформацію про значення параметрів внутрішніх функцій за промовчанням:
SQLite3
SQLite3::setAuthorizer() і відповідні константи класів були додані, за допомогою яких можна встановити власну callback-функцію для авторизації або заборони дії в базі даних.
Бібліотека стандартних функцій
-
Додані функції str_contains() str_starts_with() і str_ends_with(), які перевіряють, чи містить
haystack
, починається або закінчуєтьсяneedle
соответственно. -
Добавлена функцияfdiv(), яка виконує поділ з плаваючою точкою відповідно до IEEE 754. Поділ на нуль суворо визначено і повертає одне з значень
Inf
-Inf
илиNaN
-
Добавлена функцияget_debug_type()яка повертає тип, який може використовуватися для генерацій повідомлень про помилки. На відміну відgettype(), вона використовує канонічні імена типів, повертає імена класів об'єктів та повідомляє про тип ресурсів.
-
printf()та її похідні тепер підтримують специфікатори формату
%h
и%H
. Вони працюють як%g
и%G
, але завжди використовують"."
як десятковий роздільник, а не визначають його за допомогою локалі**LC_NUMERIC
** -
printf()та її похідні тепер підтримують використання
"*"
як ширина або точність, і в цьому випадку ширина/точність передається як аргумент printf. Це також дозволяє використовувати точність-1
с%g
%G
%h
и%H
. Наприклад, наступний код можна використовувати для відтворення форматування з плаваючою точкою за промовчанням PHP:Loading... -
proc_open()Тепер підтримує дескриптори псевдотерміналу (PTY). Наступний код приєднує
stdin
stdout
иstderr
до того самого PTY:Loading... -
proc_open()Тепер підтримує дескриптори пари сокетів. Наступний код приєднує окрему пару сокетів до
stdin
stdout
иstderr
:Loading...На відміну від каналів, у сокетів немає проблем із блокуванням введення-виведення у Windows. Однак не всі програми можуть коректно працювати із сокетами stdio.
-
Функції сортування тепер використовують стійке сортування, це означає, що елементи, що порівнюються, збережуть вихідний порядок.
-
array_diff() array_intersect()та їх похідні тепер можуть використовуватися з одним масивом як аргумент. Це означає, що тепер можливе таке:
Loading... -
Параметр
flag
у функції ob_implicit_flush()був змінений, і тепер набуває логічного значення (bool), а не ціле число (int).
Лексер (Tokenizer)
PhpToken додає об'єктно-орієнтований інтерфейс до PHP-лексера (tokenizer). Він забезпечує більш одноманітне та ергономічне уявлення, водночас ефективніше та швидше.
Zip
-
Модуль Zip оновлено до версії 1.19.1.
-
Нові методиZipArchive::setMtimeName() і ZipArchive::setMtimeIndex()для встановлення часу зміни запису.
-
Новий метод ZipArchive::registerProgressCallback()для надання оновлень під час закриття архіву.
-
Новий метод ZipArchive::registerCancelCallback(), щоб дозволити скасування під час закриття архіву.
-
Новий метод ZipArchive::replaceFile()замінити вміст запису.
-
Новий метод ZipArchive::isCompressionMethodSupported(), щоб перевірити додаткові можливості стиснення.
-
Новий метод ZipArchive::isEncryptionMethodSupported(), щоб перевірити додаткові функції шифрування.
-
Додано властивість ZipArchive::lastId для отримання значення індексу останнього доданого запису.
-
Тепер помилки можна перевірити після закриття та за допомогою властивостей ZipArchive::status та ZipArchive::statusSys або методуZipArchive::getStatusString()
-
Параметр
'remove_path'
вZipArchive::addGlob() і ZipArchive::addPattern()тепер обробляється як довільний рядковий префікс (для узгодженості з'add_path'
), тоді як раніше він інтерпретувався як ім'я каталогу. -
Додаткові функції стиснення/шифрування тепер перелічені у phpinfo.