为什么PHP需要递归存储相同的全局数据?

Why PHP needs to store the same global data recursively?

这是随机 var_dump($GLOBALS) 的结果:

array(6) {
    ["_GET"] => array(0) {}
    ["_POST"] => array(0) {}
    ["_COOKIE"]=> array(1) {
        ["PHPSESSID"]=> string(26) "o8f2mggog45mq9p5ueafgu5hv6"
    }
    ["_FILES"] => array(0) {}
    ["GLOBALS"] => array(6) {
        ["_GET"] => array(0) {}
        ["_POST"] => array(0) {}
        ["_COOKIE"] => array(1) {
            ["PHPSESSID"] => string(26) "o8f2mggog45mq9p5ueafgu5hv6"
        }
        ["_FILES"] => array(0) {}
        ["GLOBALS"]=>
        *RECURSION*
        ["_SESSION"]=> &array(1) {
            ["somestrings"]=> string(16) "someotherstrings"
        }
    }
    ["_SESSION"] => &array(1) {
        ["somestrings"] => string(16) "someotherstrings"
    }
}

我是 PHP 的新手,不明白为什么 PHP 需要这样做?它不会使用更多存储空间吗?

php 中的 $GLOBALS 数组描述了包含所有变量的范围。有趣的是 $GLOBALS 是一个指向键控变量数组的指针......包含在范围中! 因此,php 不存储该数组的副本(这实际上需要无限内存),但它只是在数组本身中保存指向该数组的指针,以便程序员可以迭代包含所有现有变量的数组。

因为根据定义,$GLOBALS是一个全局变量;由于它包含所有全局变量,因此将自身包含在其中是有意义的。递归就在这些概念的定义中。

不,它不会使用更多存储空间,因为它是指向自身的指针。如果它要递归地使用自己的副本,你会 运行 内存不足。