当使用超过 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扩展已在DateError和DateException层次结构下引入了Date扩展特定的异常和错误,而不是警告和通用异常。这改进了错误处理,但代价是必须检查错误和异常。
在没有父节点的节点上调用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()函数进行了各种更改
$step
传递0
时,将抛出一个更具描述性的ValueError。$step
时,将抛出一个ValueError。$step
是一个可以解释为整数的浮点数,则现在会这样做。$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'); // PHP 8.3.0 及以后版本输出:["9", ":", ";", "<", "=", ">", "?", "@", "A"]
range('9', 'A'); // PHP 8.3.0 之前版本输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
?>
number_format() 现在通过将$num
舍入到小数点前abs($decimals)
位来处理负$decimals
值。以前,负$decimals
值会被忽略。
file() 的标志错误检查现在会捕获所有无效标志。值得注意的是,以前FILE_APPEND
会被静默接受。
现在声明了SNMP 类常量的类型。