打印$ GLOBALS时“* RECURSION *”是什么意思?

时间:2012-09-19 05:19:50

标签: php arrays recursion

当我使用此代码打印$GLOBALS时:

<?php print_r($GLOBALS); ?>

我得到了这个输出:

Array ( [_GET] => Array ( ) [_POST] => Array ( ) [_COOKIE] => Array ( ) [_FILES] => Array ( ) [GLOBALS] => Array *RECURSION* )

*RECURSION*”在这种情况下的含义是什么,为什么$_SERVER$_REQUEST等也不打印?

3 个答案:

答案 0 :(得分:4)

请参阅this part of PHP Manual

  

请记住,$ 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)

如果你有一个指向自身的物体......也就是说,它只会进入圆圈。