当我使用此代码打印$GLOBALS
时:
<?php print_r($GLOBALS); ?>
我得到了这个输出:
Array ( [_GET] => Array ( ) [_POST] => Array ( ) [_COOKIE] => Array ( ) [_FILES] => Array ( ) [GLOBALS] => Array *RECURSION* )
“*RECURSION*
”在这种情况下的含义是什么,为什么$_SERVER
,$_REQUEST
等也不打印?
答案 0 :(得分:4)
请记住,$ GLOBALS本身就是一个全局变量。所以这样的代码不起作用:
<?php print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n"; ?>
这会导致错误消息:“嵌套级别太深 - 递归依赖性?”
你已经检索了整个列表 - 你只是不能显示它的一部分(包含递归的那个,因为你会有超时而不是有意义的东西)。
说到$_REQUEST
,它是来自$_GET
,$_POST
和$_COOKIE
的衍生产品,因此其内容是多余的。
编辑:有an old bug / feature,访问时似乎在$GLOBALS
和$_SERVER
填充$_REQUEST
。因此,请尝试访问$_REQUEST
并希望它有所帮助。无论如何,它可以在$GLOBALS
之后找到:ideone.com/CGetH
答案 1 :(得分:2)
$GLOBALS
将自身包含为数组。在the PHP reference中,您可以找到$GLOBALS
的定义:
一个关联数组,包含对当前在脚本全局范围内定义的所有变量的引用。变量名是数组的键。
因此,它必须包含自身,这会导致递归。
其他数组可能只是空的,因为您的脚本中没有其他任何内容发生。
关于递归有一个古老的笑话:&#34;要理解递归,你必须理解递归&#34;。
BTW:它在我的电脑上输出_SERVER。
答案 2 :(得分:0)
如果你有一个指向自身的物体......也就是说,它只会进入圆圈。