为什么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
是一个全局变量;由于它包含所有全局变量,因此将自身包含在其中是有意义的。递归就在这些概念的定义中。
不,它不会使用更多存储空间,因为它是指向自身的指针。如果它要递归地使用自己的副本,你会 运行 内存不足。
这是随机 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
是一个全局变量;由于它包含所有全局变量,因此将自身包含在其中是有意义的。递归就在这些概念的定义中。
不,它不会使用更多存储空间,因为它是指向自身的指针。如果它要递归地使用自己的副本,你会 运行 内存不足。