使用超过 zend.max_allowed_stack_size-zend.reserved_stack_size 字节的堆栈(对于纤程为 fiber.stack_size-zend.reserved_stack_size)时,非常接近堆栈溢出的程序现在可能会抛出 Error 异常。
在 POSIX 系统上,多次执行 proc_get_status() 现在将始终返回正确的值。以前,只有函数的第一次调用返回正确的值。现在,在 proc_get_status() 之后执行 proc_close() 也将返回正确的退出代码。以前,这将返回 -1
。在内部,这是通过在 POSIX 系统上缓存结果来实现的。如果需要之前的行为,可以通过检查 proc_get_status() 返回的数组中的 "cached"
键来检查结果是否已缓存。
Zend 最大执行时间现在在 Linux 上的 ZTS 构建中默认启用。
现在,使用带有静态属性的 trait 将重新声明从父类继承的静态属性。这将为当前类创建单独的静态属性存储。这类似于直接向类添加静态属性,而无需使用 trait。
将负索引 $n 分配给空数组现在将确保下一个索引为 $n+1
而不是 0
。
从接口继承时,现在会正确检查类常量可见性差异。
如果键映射到自身(可能通过传递性),则 WeakMap 条目现在可能会在循环收集期间被删除,前提是键无法访问,除非通过遍历 WeakMap(通过遍历的访问被认为是弱的)。以前,此类条目永远不会被自动删除。
DateTime 扩展引入了 Date 扩展特定的异常和错误,位于 DateError 和 DateException 层级结构下,而不是警告和通用异常。这改善了错误处理,但也需要检查错误和异常。
在没有父节点的节点上调用 DOMChildNode::after()、DOMChildNode::before()、DOMChildNode::replaceWith() 现在将变为无操作,而不是层次结构异常,这是 DOM 规范要求的行为。
在没有文档的情况下使用 DOMParentNode 和 DOMChildNode 方法现在可以工作,而不是抛出 DOM_HIERARCHY_REQUEST_ERR
DOMException。这与 DOM 规范要求的行为一致。
调用 DOMDocument::createAttributeNS() 而没有指定前缀将错误地创建一个默认命名空间,将元素放在命名空间中而不是属性中。此错误现已修复。
当前缀已用于不同的 URI 时,DOMDocument::createAttributeNS() 以前会错误地抛出 DOM_NAMESPACE_ERRNAMESPACE_ERR
DOMException。现在,当存在前缀名称冲突时,它会正确选择不同的前缀。
一些 DOM 类添加了新方法和属性。如果用户类继承自这些类,并声明了具有相同名称的方法或属性,则声明必须兼容。否则,将抛出关于不兼容声明的典型编译错误。有关新实现的方法和属性的列表,请参见 新功能列表 和 新函数。
opcache.consistency_checks INI 指令已被删除。此功能在跟踪 JIT 以及继承缓存中已损坏,并且自 PHP 8.1.18 和 PHP 8.2.5 以来一直被禁用,并且没有办法启用它。跟踪 JIT 和继承缓存都可能在脚本被持久化后通过使校验和失效来修改 shm。尝试修复的解决方案跳过了可修改的指针,但由于复杂性而被拒绝。出于这个原因,决定删除该功能。
现在声明了 Phar 类常量的类型。
range() 函数进行了各种更改
0
作为 $step
传递时,将抛出更具描述性的 ValueError。$step
时,现在将抛出 ValueError。$step
是可以解释为 int 的浮点数,现在将执行此操作。$start
或 $end
是空字符串,现在将发出 E_WARNING
。该值将继续被强制转换为值 0
。$start
或 $end
包含多个字节,并且是字符串,则现在将发出 E_WARNING
。$start
或 $end
被强制转换为整数,因为另一个边界输入是数字,则现在将发出 E_WARNING
。(例如,range(5, 'z');
)。$step
是浮点数,则现在将发出 E_WARNING
,除非两个边界输入都是数字字符串(例如,range('5', '9', 0.5);
不会产生警告)。range('9', 'A');
)。<?php
range('9', 'A'); // ["9", ":", ";", "<", "=", ">", "?", "@", "A"], 自 PHP 8.3.0 起
range('9', 'A'); // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], 在 PHP 8.3.0 之前
?>
number_format() 现在处理负 $decimals
值,在小数点前将 $num
四舍五入到 abs($decimals)
位数。以前,会忽略负 $decimals
值。
现在,file() 函数的错误检查标志可以捕获所有无效的标志。值得注意的是,以前FILE_APPEND
会被静默接受。
现在已经声明了 SNMP 类常量的类型。