Нова функціональність

Ядро 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

дата та час

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.