Добавлен оператор pipe (|>).
<?php
$result = "Hello World" |> strlen(...);
print $result . PHP_EOL; // Prints "11"Добавлена поддержка замыканий и объектов первого класса в константных выражениях. Поддерживаются:
Добавлен атрибут 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 теперь можно применять к свойствам.
Добавлена поддержка асимметричной видимости для статических свойств.
Фатальные ошибки (такие как превышение максимального времени выполнения) теперь включают обратную трассировку.
Объявление свойств в конструкторе теперь можно использовать для окончательных (final) свойств.
Добавлена поддержка приведения типов в константных выражениях.
<?php
const T1 = (int) 0.3; // Ранее: "Фатальная ошибка: константное выражение содержит недопустимые операции"
print T1 . PHP_EOL; // Сейчас выведет "0"Языковая конструкция clone теперь является функцией и поддерживает переназначение (только для чтения) свойств во время клонирования с помощью нового параметра $withProperties.
Добавлена поддержка совместного использования дескрипторов, которые сохраняются между несколькими запросами PHP, что позволяет безопасно и более эффективно повторно использовать соединения.
Добавлена поддержка констант CURLINFO_USED_PROXY (libcurl >= 8.7.0),
CURLINFO_HTTPAUTH_USED и CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0)
в функции curl_getinfo().
Если функция 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.
Добавлена поддержка CURLINFO_CONN_ID (libcurl >= 8.2.0)
для функции curl_getinfo(). Константа позволяет получить
уникальный идентификатор соединения, используемого для передачи cURL.
Это в первую очередь полезно, когда в приложениях на уровне PHP требуется
повторное использование соединений или логика пула соединений.
Если функция curl_getinfo() возвращает массив,
значение доступно как ключ "conn_id".
Добавлена поддержка CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0)
для функции curl_getinfo(). Константа позволяет получить время (в микросекундах),
которое запрос провёл в очереди соединений libcurl перед отправкой.
Это значение также можно получить, передав
константу CURLINFO_QUEUE_TIME_T в параметр option
функции curl_getinfo().
Добавлена поддержка CURLOPT_SSL_SIGNATURE_ALGORITHMS
для указания алгоритмов подписи, которые будут использоваться для TLS.
Добавлено свойство Dom\Element::$outerHTML.
Добавлено свойство $children в реализацию интерфейса Dom\ParentNode.
Добавлена поддержка тегов Exif OffsetTime*.
Добавлена поддержка HEIF/HEIC.
Добавлен новый флаг FILTER_THROW_ON_FAILURE для передачи
в функции фильтрации, который при выявлении ошибки при проверке выбрасывает исключение.
Новый флаг нельзя комбинировать с FILTER_NULL_ON_FAILURE;
попытка сделать это приведёт к выбрасыванию исключения 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::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() теперь поддерживают cookie с независимым разделенным состоянием
с помощью ключа "partitioned".
Варианты перечисления теперь выгружаются методом SoapClient::__getTypes().
Добавлена поддержка атрибута xml:lang в Soap 1.2 Reason Text.
Добавлен опциональный параметр $lang в
подпись SoapFault::__construct() и
SoapServer::fault().
Это решает проблему совместимости с клиентами .NET SOAP.
Функция mail() теперь возвращает фактическую ошибку sendmail и определяет, был ли процесс sendmail неожиданно прерван. В таких случаях выдаётся предупреждение и функция возвращает значение 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 и URL в соответствии с RFC 3986 и WHATWG URL.
Аргумент $namespace методов XSLTProcessor::getParameter(),
XSLTProcessor::setParameter() и
XSLTProcessor::removeParameter() теперь действительно работает,
а не рассматривается как пустой.
Работает только в том случае, если аргумент $name
не использует нотацию Кларка и не является QName,
поскольку в этих случаях пространство имён берётся из href или префикса пространства имён соответственно.
Функция flock() теперь поддерживается в потоках zlib. Ранее это всегда приводило к сбою при выполнении любых действий по блокировке.