Что означает * RECURSION * при печати $ GLOBALS?

Когда я печатаю $GLOBALS используя этот код:

 <?php print_r($GLOBALS); ?> 

Я получаю этот вывод:

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

Что означает *RECURSION* в данном случае, и почему $_SERVER , $_REQUEST и т. Д. Не печатаются?

См. Эту часть руководства PHP :

Имейте в виду, что $ GLOBALS является самой глобальной переменной. Поэтому такой код не будет работать:

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

В результате появляется сообщение об ошибке: «Уровень вложенности слишком глубокий – рекурсивная зависимость?»

Вы уже получили весь список – вы просто не можете отобразить его часть (ту, которая содержит рекурсию, потому что у вас будет тайм-аут, а не что-нибудь значимое).

Когда дело доходит до $_REQUEST , оно является производным от $_GET , $_POST и $_COOKIE , поэтому его содержимое избыточно.

EDIT : Есть старая ошибка / функция , которая, кажется, $GLOBALS с $_SERVER и $_REQUEST когда к ним обращаются. Поэтому попробуйте обратиться к $_REQUEST и надейтесь, что это поможет. Во всяком случае, его можно найти в $GLOBALS после этого: ideone.com/CGetH

$GLOBALS содержит себя как массив. В ссылке PHP вы можете найти определение $GLOBALS :

Ассоциативный массив, содержащий ссылки на все переменные, которые в настоящее время определены в глобальной области действия сценария. Имена переменных – это ключи массива.

Поэтому он должен также содержать сам, что приводит к рекурсии.

Другие массивы, вероятно, просто пусты, поскольку в вашем скрипте ничего больше не произошло.

Существует старая шутка о рекурсии: «Чтобы понять рекурсию, вы должны понимать рекурсию».

BTW: Он выводит _SERVER на моем компьютере.

Когда у вас есть объект, указывающий на себя … т.е. itll просто по кругу.