以下是随机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需要这样做?它会不会使用更多存储空间?
答案 0 :(得分:3)
因为根据定义,$GLOBALS
是全局变量;并且由于它包含所有全局变量,因此将其自身包含在其中是有意义的。递归是这些概念的定义。
不,它不使用更多存储空间,因为它是指向自身的指针。如果以递归方式使用自身的副本,则会耗尽内存。
答案 1 :(得分:2)
php中的$GLOBALS
数组描述了包含所有变量的范围。有趣的是$GLOBALS
是指向范围内包含的键控变量数组的指针!
因此,php不存储该数组的副本(实际上需要无限的内存),但它只是在数组本身中保存了一个指向该数组的指针,因此程序员可以迭代包含所有现有变量的数组。