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

Ядро PHP

Оператор Pipe

Добавили оператор конвейеризации |>.

<?php

$result
= "Hello World" |> strlen(...);
print
$result . PHP_EOL; // Prints "11"

Замыкания в константных выражениях

Добавили поддержку статических замыканий в константных выражениях. Константные выражения теперь поддерживают как стандартный синтаксис объявления анонимных функций, так и синтаксис с многоточием, которым создаются первоклассные вызываемые объекты Closure. Статические замыкания определяют при инициализации:

  • Параметров атрибутов.
  • Значений по умолчанию для свойств и параметров.
  • Глобальных констант, констант в пространствах имён и констант классов.

Атрибут #[\NoDiscard]

Добавили атрибут NoDiscard, который делает значение возврата функции обязательным для обработки.

Добавили также инструкцию (void), которая указывает на намеренное игнорирование требования обработать значение возврата. Инструкция (void) не влияет на выполнение программы, а только подавляет предупреждения, которые выдаёт атрибут #[\NoDiscard], и возможные диагностические сообщения, которые выдают внешние IDE или инструменты статического анализа.

<?php

#[\NoDiscard]
function
concat(string $a, string $b): string {
return
$a . $b;
}

// Предупреждение: Значение, которое возвращает функция concat(), требуется либо обработать,
// либо намеренно проигнорировать — указать инструкцию (void) перед вызовом функции в файле xxx.php.
concat("a", "b");

// Предупреждение не выдаётся, поскольку результат функции присваивается переменной.
$results = concat("a", "b");

// Предупреждение не выдаётся, поскольку инструкция (void) намеренно подавила вывод предупреждения.
(void)concat("a", "b");

Атрибуты констант

Добавили поддержку нацеливания атрибутов на константы, которые объявляются вне классов выражениями наподобие const MY_CONST = 1; и вычисляются на этапе компиляции. Константы, которые определили функцией — define('MY_CONST', 1);, не поддерживают назначение атрибутов.

Атрибут Deprecated теперь поддерживает нацеливание на константы.

Атрибут #[\DelayedTargetValidation]

Новый атрибут DelayedTargetValidation подавляет ошибки, которые на этапе компиляции выдаёт ядро или модуль при назначении атрибутов недопустимым целям. При назначении атрибута ядро или модуль сообщают об ошибках во время выполнения в момент вызова метода ReflectionAttribute::newInstance().

Атрибут #[\Override] для свойств

Атрибут Override теперь поддерживает нацеливание на свойства.

Асимметричная видимость статических свойств

Добавили поддержку асимметричной видимости при объявлении статических свойств.

Трассировки стека вызовов при фатальных ошибках

Фатальные ошибки наподобие превышения предельного времени выполнения теперь включают трассировку стека вызовов.

Объявление окончательных свойств в конструкторе

Конструкторы теперь поддерживают объявление окончательных свойств при продвижении параметров до свойств класса.

Приведения типов в константных выражениях

Добавили поддержку приведения типов в константных выражениях.

<?php

const T1 = (int) 0.3; // Раньше: "Fatal error: Constant expression contains invalid operations"
print T1 . PHP_EOL; // Теперь выводит "0"

Функция clone

Языковая конструкция clone теперь стала функцией и поддерживает переназначение доступных только для чтения свойств во время клонирования через новый параметр $withProperties.

Модуль cURL

Добавили поддержку общих дескрипторов, которые сохраняются между PHP-запросами, разделяют ресурсы между сеансами обмена данными и сокращают накладные расходы на повторную установку соединений.

Для функции curl_getinfo() добавили поддержку констант CURLINFO_USED_PROXY (требуется библиотека libcurl >= 8.7.0), CURLINFO_HTTPAUTH_USED и CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0). При возврате функцией curl_getinfo() массива та же информация доступна в элементах с ключами "used_proxy", "httpauth_used" и "proxyauth_used". Константа CURLINFO_USED_PROXY получает значение ноль, если предыдущая передача выполнялась не через прокси, или ненулевое значение, если передача выполнялась через прокси. Константы CURLINFO_HTTPAUTH_USED и CURLINFO_PROXYAUTH_USED получают битовые маски, которые указывают на методы аутентификации HTTP и прокси в предыдущем запросе. Возможные значения содержатся в описании констант семейства CURLAUTH_*.

Добавили cURL-опцию CURLOPT_INFILESIZE_LARGE — безопасная замена константы CURLOPT_INFILESIZE. В отдельных системах опция CURLOPT_INFILESIZE для размера файла принимает только 32-разрядное знаковое целочисленное значение, которое ограничивает предельный размер файла 2,0 ГиБ, даже в 64-разрядных системах. Константа CURLOPT_INFILESIZE_LARGE принимает наибольшее целочисленное значение, обработку которого поддерживает система.

Добавили значения CURLFOLLOW_OBEYCODE, CURLFOLLOW_FIRSTONLY и CURLFOLLOW_ALL для опции CURLOPT_FOLLOWLOCATION функции curl_setopt(). Константа CURLFOLLOW_OBEYCODE для более строгого соблюдения перенаправлений, если они разрешены. Константа CURLFOLLOW_FIRSTONLY следует только за первым перенаправлением, поэтому передача прекратится, если в текущем сеансе обмена данными появятся очередные перенаправления. Константа CURLFOLLOW_ALL эквивалентна установке константе CURLOPT_FOLLOWLOCATION значения true.

Для функции curl_getinfo() добавили поддержку константы CURLINFO_CONN_ID (требуется библиотека libcurl >= 8.2.0). Константа возвращает уникальный идентификатор соединения, через которое модуль cURL выполнял передачу данных. В первую очередь константа полезна, когда в приложениях на уровне PHP требуется логика передачи данных через то же соединение или логика пула соединений. При возврате функцией curl_getinfo() массива значение доступно в элементе с ключом "conn_id".

Для функции curl_getinfo() добавили поддержку константы CURLINFO_QUEUE_TIME_T (требуется библиотека libcurl >= 8.6.0). Константа возвращает время в микросекундах, которое запрос провёл в очереди соединений библиотеки libcurl перед отправкой. Значение также доступно при передаче константы CURLINFO_QUEUE_TIME_T в параметр option функции curl_getinfo().

Добавили поддержку опции CURLOPT_SSL_SIGNATURE_ALGORITHMS, через которую указывают алгоритмы подписи для протокола TLS.

Модуль DOM

Добавили свойство Dom\Element::$outerHTML.

Добавили свойство $children в реализацию интерфейса Dom\ParentNode.

Модуль EXIF

Добавили поддержку Exif-тегов OffsetTime*.

Добавили поддержку формата HEIF/HEIC.

Фильтрация данных

Добавили новый флаг FILTER_THROW_ON_FAILURE для функций фильтрации. Флаг заставит функцию выбросить исключение, если значение не прошло фильтрацию. Новый флаг нельзя комбинировать с флагом FILTER_NULL_ON_FAILURE; при попытке объединить флаги PHP выбросит ошибку ValueError.

Модуль интернационализации

Добавили константы класса: NumberFormatter::CURRENCY_ISO, NumberFormatter::CURRENCY_PLURAL, NumberFormatter::CASH_CURRENCY и NumberFormatter::CURRENCY_STANDARD для форматов чисел, связанных с валютой.

Добавили методы Locale::addLikelySubtags() и Locale::minimizeSubtags() для обработки вероятных тегов заданной локали.

Добавили класс IntlListFormatter для форматирования, упорядочивания и пунктуации списка элементов с заданной локалью: операнды IntlListFormatter::TYPE_AND, IntlListFormatter::TYPE_OR, IntlListFormatter::TYPE_UNITS, а также ширины IntlListFormatter::WIDTH_WIDE, IntlListFormatter::WIDTH_SHORT, IntlListFormatter::WIDTH_NARROW. Поддерживается начиная с библиотеки ICU 67.

Драйвер PDO_Sqlite

В класс добавили константу Pdo\Sqlite::ATTR_BUSY_STATEMENT.

Добавили константы класса: Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT, Pdo\Sqlite::EXPLAIN_MODE_PREPARED, Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN, Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN.

Добавили атрибут соединения Pdo\Sqlite::ATTR_TRANSACTION_MODE с возможными значениями Pdo\Sqlite::TRANSACTION_MODE_DEFERRED, Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE и Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE для настройки режима транзакции, в котором выполнится транзакция при вызове метода beginTransaction().

Сессии

Функции session_set_cookie_params(), session_get_cookie_params() и session_start() теперь поддерживают ключ "partitioned" для секционирования данных cookie.

Модуль SOAP

Варианты перечисления теперь выгружаются методом SoapClient::__getTypes().

Добавили поддержку атрибута xml:lang для элемента Reason Text в протоколе SOAP 1.2.

В сигнатуру методов SoapFault::__construct() и SoapServer::fault() добавили необязательный параметр lang. Параметр решает проблему совместимости с SOAP-клиентами на платформе .NET.

Стандартные модули

Функция mail() теперь возвращает фактическую ошибку процесса sendmail и распознаёт его внезапное завершение. В таких случаях PHP выдаёт предупреждение и функция возвращает false. Раньше эти ошибки игнорировались. Изменение затрагивает только транспорт sendmail.

Функция getimagesize() теперь поддерживает изображения в формате HEIF/HEIC.

Функция getimagesize() теперь поддерживает изображения в формате SVG, если установили библиотеку ext-libxml. Аналогично, функции image_type_to_extension() и image_type_to_mime_type() теперь тоже обрабатывают константу IMAGETYPE_SVG.

Массив, который возвращается функцией getimagesize(), теперь содержит две дополнительные записи: "width_unit" и "height_unit", которые указывают, в каких единицах выражаются размеры. По умолчанию размеры выражаются в пикселях — px. Не в каждом изображении единицы совпадают, например, размер одного направления выражается в сантиметрах — cm, а другого в пикселях — px.

Функции setcookie() и setrawcookie() теперь поддерживают ключ "partitioned".

Модуль URI

Добавили встроенный модуль URI, который теперь включён по умолчанию. Модуль предоставляет инструменты для обработки URI-идентификаторов и URL-адресов по правилам стандартов RFC 3986 и WHATWG.

Модуль XSL

Аргумент namespace в методах XSLTProcessor::getParameter(), XSLTProcessor::setParameter() и XSLTProcessor::removeParameter() теперь обрабатывается корректно и не игнорируется как пустой. Аргумент работает, только если параметр name указали не в нотации Кларка или QName-имени, поскольку при таком формате значения пространство имён извлекается из префикса или атрибута href самого имени.

Модуль Zlib

Функция flock() теперь поддерживает потоки zlib. Раньше попытки установить блокировку в таких потоках завершались ошибкой.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top