对如何$GLOBALS
使用的微小更改将对所有数组操作的性能产生重大影响。Nikita 在RFC 中很好地解释了问题和解决方案。更改意味着某些边缘情况无法再使用$GLOBALS
. “不再支持写入作为一个整体的 $GLOBALS。以下所有内容都会产生编译时错误”:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
最重要的是,通过$GLOBALS
引用传递会产生一个运行时错误:
by_ref($GLOBALS); // Run-time error
Nikita 分析了 Packagist 上排名前 2000 的软件包,仅发现了 23 个会受此更改影响的案例。我们可以得出这样的结论——从技术上讲,这种变化的影响很小,这就是内部人员决定在 PHP 8.1 中添加它的原因。