8

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

<?php print_r($GLOBALS); ?>

我得到这个输出:

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

*RECURSION*在这种情况下,“”是什么意思,为什么不打印$_SERVER,$_REQUEST等?

4

3 回答 3

4

请参阅PHP 手册的这一部分

请记住,$GLOBALS 本身就是一个全局变量。所以这样的代码不起作用:

<?php
    print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n";
?>

这会导致错误消息:“嵌套级别太深 - 递归依赖?”

您已经检索了整个列表 - 您只是无法显示其中的一部分(包含递归的列表,因为您将有超时而不是任何有意义的东西)。

说到,它是,和$_REQUEST的派生词,所以它的内容是多余的。$_GET$_POST$_COOKIE

编辑:有一个旧的错误/功能,似乎是填充$GLOBALS$_SERVER访问$_REQUEST它们的时间。所以尝试访问$_REQUEST并希望它有所帮助。无论如何,它可以在$GLOBALS之后找到:ideone.com/CGetH

于 2012-09-19T05:26:10.887 回答
2

$GLOBALS包含自己作为一个数组。在PHP 参考中,您可以找到以下定义$GLOBALS

一个关联数组,包含对当前在脚本全局范围内定义的所有变量的引用。变量名是数组的键。

因此,它还必须包含自身,这会导致递归。

其他数组可能只是空的,因为您的脚本中没有发生任何其他事情。

关于递归有一个古老的笑话:“要理解递归,你必须理解递归”。

顺便说一句:它在我的计算机上输出 _SERVER。

于 2012-09-19T05:46:12.683 回答
0

当您有一个指向自身的对象时……即,它只会绕圈子。

于 2012-09-19T05:22:30.677 回答