新增管道(|>)运算符。
<?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() 的返回值应要么被使用,要么通过在 xxx.php 中将其强制转换为 (void) 来有意忽略。
concat("a", "b");
// 不会发出警告,因为返回值已被赋值操作使用。
$results = concat("a", "b");
// 不会发出警告,因为使用了 (void) 转换。
(void)concat("a", "b");#[\DelayedTargetValidation] 注解新增的 DelayedTargetValidation 注解可用于抑制在无效目标上使用核心(或扩展)注解时产生的编译时错误。这些错误会在调用 ReflectionAttribute::newInstance() 时于运行时报告(如果需要)。
#[\Override]Override 注解现在可应用于属性。
新增对静态属性的非对称可见性支持。
Fatal Error(例如超出最大执行时间)现在包含回溯信息。
构造方法属性提升现在可以用于最终属性。
新增对常量表达式中类型转换的支持。
<?php
const T1 = (int) 0.3; // 之前:“Fatal error: Constant expression contains invalid operations”
print T1 . PHP_EOL; // 打印“0”clone 语言结构现在是函数,并通过新的 $withProperties 参数支持在克隆期间重新分配(只读)属性。
新增对多个 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" key
获取。如果上一次传输未使用代理,将设置 CURLINFO_USED_PROXY
为零;如果使用了代理,则为非零值。CURLINFO_HTTPAUTH_USED 和 CURLINFO_PROXYAUTH_USED
将返回位掩码,表示上一次请求中使用的 HTTP 和代理认证方法。有关可能的值,请参阅
CURLAUTH_* 常量。
新增 CURLOPT_INFILESIZE_LARGE Curl 选项,作为 CURLOPT_INFILESIZE
的安全替代。在某些系统上,即使是在 64 位系统中,CURLOPT_INFILESIZE 也仅接受 32
位有符号整数作为文件大小(2.0 GiB)。而 CURLOPT_INFILESIZE_LARGE 可接受系统能够处理的最大整数值。
为 curl_setopt() 的 CURLOPT_FOLLOWLOCATION 选项新增了
CURLFOLLOW_OBEYCODE、CURLFOLLOW_FIRSTONLY 和 CURLFOLLOW_ALL
值。CURLFOLLOW_OBEYCODE 在允许重定向的情况下,会更严格地遵循重定向规则。CURLFOLLOW_FIRSTONLY
仅跟随第一次重定向,因此如果有后续的重定向,则不会继续跟进。CURLFOLLOW_ALL 等同于将
CURLOPT_FOLLOWLOCATION 设置为 true。
curl_getinfo() 函数新增对 CURLINFO_CONN_ID(libcurl >= 8.2.0)的支持。该常量可用于获取 cURL
传输的连接唯一 ID。当需要在 PHP 层面实现连接复用或连接池逻辑时,该功能尤其有用。当 curl_getinfo() 返回数组时,该值可通过
"conn_id" key 获取。
curl_getinfo() 函数新增对 CURLINFO_QUEUE_TIME_T(libcurl >=
8.6.0)的支持。该常量可用于获取请求发送之前在 libcurl 的连接队列中等待的时间(以微秒为单位)。通过将
CURLINFO_QUEUE_TIME_T 传递给 curl_getinfo() 的
option 参数,也可以获取该值。
新增对 CURLOPT_SSL_SIGNATURE_ALGORITHMS 的支持,用于指定 TLS 的签名算法。
新增对 OffsetTime* Exif 标签的支持。
新增对 HEIF/HEIC 的支持。
新增 FILTER_THROW_ON_FAILURE flag,可传递给过滤函数,并在验证失败时强制触发异常。此
flag 无法与 FILTER_NULL_ON_FAILURE 结合使用,尝试这样做将导致抛出
ValueError。
新增与多种货币相关数字格式对应的类常量:NumberFormatter::CURRENCY_ISO、NumberFormatter::CURRENCY_PLURAL、NumberFormatter::CASH_CURRENCY,
和 NumberFormatter::CURRENCY_STANDARD。
新增 Locale::addLikelySubtags() 和 Locale::minimizeSubtags() 方法,用于处理指定 locale 的可能标签。
新增 IntlListFormatter 类,用于根据指定 locale 对项目列表进行格式化、排序和标点处理,支持
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() 现在通过 "partitioned" key 支持分区 cookie。
枚举项现在会在 SoapClient::__getTypes() 中输出。
新增对 SOAP 1.2 Reason Text 的 xml:lang 属性的支持。
因此,SoapFault::__construct() 和 SoapServer::fault()
的签名现在包含可选的 $lang 参数。该支持解决了与 .NET SOAP 客户端的兼容性问题。
mail() 函数现在会返回实际的 sendmail 错误,并能检测 sendmail 进程是否意外终止。若发生此类情况,将发出警告并返回 false。此前会静默忽略这些错误。此变更仅影响 sendmail 的传输。
getimagesize() 现在支持 HEIF/HEIC 图像。
当加载 ext-libxml 扩展时,getimagesize() 现已支持 SVG 图像。同样,image_type_to_extension() 和 image_type_to_mime_type() 现也处理 IMAGETYPE_SVG。
getimagesize() 返回的数组现在包含两个额外的条目:"width_unit" 和
"height_unit",用于表示尺寸所使用的单位。这些单位默认为 px。这两个单位不一定相同(例如,一个可能是
cm,另一个可能是 px)。
setcookie() 和 setrawcookie() 现在支持
"partitioned" key。
新增始终启用的 URI 扩展,可用于根据 RFC 3986 和 WHATWG URL 规范处理 URI 和 URL。
XSLTProcessor::getParameter()、XSLTProcessor::setParameter() 和
XSLTProcessor::removeParameter() 的 $namespace
参数现已生效,不再视为空值。此功能仅在 $name 参数未使用 Clark 表示法且不是 QName
时有效,因为在这些情况下,命名空间分别取自命名空间的 href 或前缀。
flock() 现已支持 zlib 流。此前,该函数始终无法执行任何锁定操作。