Когда я печатаю $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 просто по кругу.