闭包名称已调整为包含父函数的名称和定义行,以便于区分,例如在堆栈跟踪中。
现在允许在析构函数执行期间进行纤程切换。以前由于与垃圾回收发生冲突而被阻止。
析构函数现在可以在单独的纤程中执行
当在纤程中触发垃圾回收时,由 GC 调用的析构函数将在单独的纤程中执行:gc_destructor_fiber。如果此纤程挂起,则会创建一个新的纤程来执行剩余的析构函数。GC 不再引用以前的 gc_destructor_fiber,如果它在任何其他地方都没有被引用,则可以将其回收。其析构函数被挂起的对象将不会被回收,直到析构函数返回或Fiber被回收。
传递给ob_start()的flags
参数的输出处理程序状态标志现在已清除。
output_add_rewrite_var()现在使用url_rewriter.hosts
而不是session.trans_sid_hosts
来选择将被重写的主机。
已删除对 EOL Apache 2.0 和 2.2 的支持。现在最低要求的 Apache 版本为 2.4。
如果无法找到指定的文件,则内置服务器会通过遍历父目录递归地查找索引文件。如果路径看起来像是引用文件(即,最后一个路径组件包含一个句点),则以前会跳过此过程。在这种情况下,将返回 404 错误。行为已更改为在所有情况下都查找索引文件。
现在,在没有正文的情况下刷新标头将成功。
状态页面有一个新字段用于显示内存峰值。
Solaris/Illumos 的/dev/poll events.mechanism
设置已停用。
trigger_error()和user_error()现在具有true的返回类型,而不是bool。
DOMDocument::registerNodeClass()现在具有true的暂定返回类型,而不是bool。在实践中,它只能返回true
。
hash_update()现在具有true的暂定返回类型,而不是bool。在实践中,它只能返回true
。
NumberFormatter::ROUND_TOWARD_ZERO
和NumberFormatter::ROUND_AWAY_FROM_ZERO
已添加为NumberFormatter::ROUND_DOWN
和NumberFormatter::ROUND_UP
的别名,以与新的PHP_ROUND_*
模式保持一致。
ResourceBundle::get()现在具有ResourceBundle|array|string|int|null
的暂定返回类型。
idn_to_ascii()和idn_to_utf8()函数现在始终在domain
名称为空或过长时抛出ValueError。
idn_to_ascii()和idn_to_utf8()函数现在始终在variant
参数不是INTL_IDNA_VARIANT_UTS46
时抛出ValueError。
libxml_set_streams_context()现在在将非流上下文资源传递给函数时立即抛出TypeError,而不是在以后使用流上下文时抛出。
现在,mb_strcut()在无效的 UTF-8 和 UTF-16 字符串上的行为更加一致。对于有效的 UTF-8 和 UTF-16 字符串,行为没有变化。
odbc_fetch_object()、odbc_fetch_array()和odbc_fetch_into()的row
现在具有null
的默认值,与odbc_fetch_row()一致。以前,默认值分别为-1
、-1
和0
。
openssl_csr_new()中的extra_attributes
设置CSR属性而不是主题 DN,这在以前是错误的。
openssl_csr_new()中的dn
允许为单个条目设置array值。
已将新的serial_hex
添加到openssl_csr_sign(),以允许以十六进制格式设置序列号。
如果省略了秒数,则使用openssl_x509_parse()解析 ASN.1 UTCTime 会失败,对于 OpenSSL 3.2 以下的版本(此类字段返回-1
)。OpenSSL 3.3 以上的版本已不再加载此类证书。
现在可以使用PDO::getAttribute()获取PDO::ATTR_STRINGIFY_FETCHES
属性的值。
已添加新的PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
,用于使用PDO::getAttribute()检索查询结果的内存使用情况,适用于支持它的驱动程序。
现在可以使用PDO::getAttribute()获取FB_ATTR_DATE_FORMAT
、FB_ATTR_TIME_FORMAT
、FB_ATTR_TIMESTAMP_FORMAT
属性的值。
添加了新的属性以指定事务隔离级别和访问模式。已添加五个与此功能相关的常量
Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL
Pdo\Firebird::READ_COMMITTED
Pdo\Firebird::REPEATABLE_READ
Pdo\Firebird::SERIALIZABLE
Pdo\Firebird::WRITABLE_TRANSACTION
使用持久连接时,构造函数中现在有一个活动检查。
根据ibase.h中FB_API_VER
的值构建的内容会发生变化。可以使用新的静态方法Pdo\Firebird::getApiVersion()获取此信息。此信息现在也已在phpinfo()中引用。
现在提供了五个新的数据类型:INT128
、DEC16
、DEC34
、TIMESTAMP_TZ
、TIME_TZ
。这些从 Firebird 4.0 开始可用。
现在可以通过 PDO::getAttribute() 获取属性 PDO::ATTR_FETCH_TABLE_NAMES
的值。
支持检索 **PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
** 查询的内存使用情况。
pg_select() 的 conditions
参数现在是可选的,并接受空数组。
Phar::setAlias(), Phar::setDefaultStub() 方法现在具有 true 的尝试返回值,而不是 bool。
posix_isatty() 现在在文件描述符/流参数无效时设置错误号。
现在可以在生成器执行完成之后调用 ReflectionGenerator::getFunction()。
socket_create_listen() 的 backlog
参数现在默认值为 SOMAXCONN
。之前是 128
。
sodium_crypto_aead_aes256gcm_()* 函数现在可以在具有 ARM 加密扩展的 aarch64 CPU 上使用。
SplPriorityQueue::insert(), SplPriorityQueue::recoverFromCorruption(), SplHeap::insert(), SplHeap::recoverFromCorruption() 方法现在具有 true 的尝试返回值,而不是 bool。
SplObjectStorage 现在实现了 SeekableIterator。
password_hash() 函数中,用于 PASSWORD_BCRYPT
哈希算法的默认 'cost'
值已从 10
增加到 12
。
debug_zval_dump() 现在指示数组是否已打包。
long2ip() 现在返回值类型为 string,而不是 string|false
。
highlight_string() 现在返回值类型为 string|true,而不是 string|bool
。
print_r() 现在返回值类型为 string|true,而不是 string|bool
。
round() 函数的 mode
参数已扩展为 RoundingMode|int
,接受新 RoundingMode 枚举的实例。
round() 函数添加了四种新模式:RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero
已重写舍入到整数的内部实现,使其更易于验证正确性并更易于维护。由于重写,一些舍入错误已修复。例如,以前将 0.49999999999999994
舍入到最接近的整数将导致 1.0
,而不是正确的结果 0.0
。其他输入也可能受到影响,并导致与早期 PHP 版本不同的输出。
修复了由 round() 函数的“预舍入”导致的错误。以前,使用“预舍入”将值如 0.285
(实际上为 0.28499999999999998
)视为十进制数并将其舍入为 0.29
。但是,“预舍入”会错误地舍入某些数字,因此此修复删除了“预舍入”并更改了数字的比较方式,以便正确地将值舍入为十进制数。
round() 可以处理的最大精度已扩展一位。例如,round(4503599627370495.5)
以前返回 4503599627370495.5
,但现在返回 4503599627370496
。
现在所需的最低 libcurl 版本为 7.61.0。
CURLOPT_DNS_USE_GLOBAL_CACHE
选项不再有任何作用,并且会被静默忽略。此底层功能在 libcurl 7.11.1 中已弃用,并在 libcurl 7.62.0 中删除。
现在可以将 GMP 对象转换为 bool,而不是发出 E_RECOVERABLE_ERROR
。转换行为被重载,以便表示值为 0
的 GMP 对象转换为 false
。
现在所需的最低 libxml2 版本为 2.9.4。
Intl 类的行为已标准化为在尝试使用未初始化的对象或克隆失败时始终抛出 Error 异常。
Unicode 数据表已更新至 Unicode 16.0。
支持 MySQL 9 中新的 VECTOR 数据类型。
现在所需的最低 OpenSSL 版本为 1.1.1。
现在所需的最低 libpq 版本为 10.0。
现在所需的最低 libpq 版本为 10.0。
现在,SplFixedArray 中的越界访问将抛出类型为 OutOfBoundsException 的异常,而不是 RuntimeException。因为 OutOfBoundsException 是 RuntimeException 的子类,所以在尝试捕获这些异常时不会出现行为变化。
现在声明了类型属性 XSLTProcessor::$cloneDocument 和 XSLTProcessor::$doXInclude。
现在所需的最低 zlib 版本为 1.2.11。
提高了在高并发负载下 ZTS 构建中浮点数解析和格式化的性能。这会影响 printf() 函数族以及 json_encode() 或 serialize() 等序列化函数。
仅使用 %s
和 %d
说明符的 sprintf() 将被编译成等效的字符串插值,避免函数调用的开销并重复解析格式字符串。
改进了数字转换和运算的性能。
对于没有 xpath 查询的情况,DOMNode::C14N() 的性能得到了极大的提升。对于包含数万个节点的文档,这可以轻松地提高两个数量级的速度。
提高了 XML 序列化的性能并减少了内存消耗。
减少了节点类的内存使用量。
对于大型上传,FTP 上传的性能提高了高达 10 倍。
添加了 SHA-256 的 SSE2 和 SHA-NI 实现。这在支持的 CPU 上将性能提高了约 1.3 倍 (SSE2) 和 3 倍 - 5 倍 (SHA-NI)。感谢 Colin Percival / Tarsnap 提供此优化。
mb_strcut() 现在对于 UTF-8 和 UTF-16 字符串的速度快得多。
现在查找 mbstring 编码名称的速度快得多。
SJIS-win 到 Unicode 的转换性能得到了极大的提升。
提高了 MySQLnd 引号的性能。
提高了命名捕获组的性能。
提高了 Random\Randomizer 的性能,特别关注 Random\Randomizer::getBytes() 和 Random\Randomizer::getBytesFromString() 方法。
提高了 XML 序列化的性能并减少了内存消耗。
strspn() 和 strcspn() 的性能得到了极大的提升。它们现在以线性时间运行,而不是受二次时间的限制。
提高了 strpbrk() 的性能。
get_browser() 现在速度快得多,某些测试用例的速度提高了 1.5 倍 - 2.5 倍。