You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.1.0及以上版本能否通过$GLOBALS数组设置全局变量?

关于PHP 8.1.0中$GLOBALS数组的写访问问题

先明确官方文档的两个核心说明:

自PHP 8.1.0起,不再支持对整个$GLOBALS数组的写访问
自PHP 8.1.0起,$GLOBALS成为全局符号表的只读副本,即无法通过该副本修改全局变量。在此之前,$GLOBALS数组不受PHP数组常规的按值行为限制,可通过其副本修改全局变量。

你给出的这段代码是可以正常执行的:

<?php
    $x = "hello";
    
    $GLOBALS["x"] = "bye";
    
    echo $x;
?>

执行后会输出bye,完全没问题。

文档里说的“禁止对整个$GLOBALS数组的写访问”,指的是直接覆盖整个$GLOBALS数组的操作,比如:

// 这种操作在PHP 8.1.0及之后会报错
$GLOBALS = [];
// 或者
$GLOBALS = ['foo' => 'bar'];

而修改$GLOBALS数组中的单个元素(比如$GLOBALS["x"] = "bye")不属于“对整个数组的写访问”,这类操作在PHP 8.1.0之后依然被允许,依然可以通过这种方式修改对应的全局变量。

内容的提问来源于stack exchange,提问作者Steven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:05:02