PHP 8.5.0 Released!

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

Ядро PHP

Оператор Pipe

Добавлен оператор pipe (|>).

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

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

Добавлена поддержка замыканий и объектов первого класса в константных выражениях. Поддерживаются:

  • Параметры атрибутов.
  • Значения свойств и параметров по умолчанию.
  • Константы и константы классов.

Атрибут #[\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 теперь можно применять к свойствам.

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

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

Трассировки для фатальных ошибок

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

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

Объявление свойств в конструкторе теперь можно использовать для окончательных (final) свойств.

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

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

<?php
const T1 = (int) 0.3; // Ранее: "Фатальная ошибка: константное выражение содержит недопустимые операции"
print T1 . PHP_EOL; // Сейчас выведет "0"

Функция clone

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

Модуль cURL

Добавлена поддержка совместного использования дескрипторов, которые сохраняются между несколькими запросами 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

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

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

Модуль EXIF

Добавлена поддержка тегов 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

Добавлена константа класса 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".

Модуль SOAP

Варианты перечисления теперь выгружаются методом 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, который можно использовать для обработки URI и URL в соответствии с RFC 3986 и WHATWG URL.

Модуль XSL

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

Модуль Zlib

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

Добавить

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

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