2012-09-19 14 views
7

Al imprimir $GLOBALS utilizando este código:

<?php print_r($GLOBALS); ?> 

consigo esta salida:

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

¿Qué significa *RECURSION* en este caso, y por qué se $_SERVER, $_REQUEST, etc. no se han impreso ¿también?

Respuesta

4

Ver this part of PHP Manual:

Tenga en cuenta que $ GLOBALS es, en sí, una variable global. Así código como este no funcionará:

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

Esto se traduce en el mensaje de error: "? Nivel de anidamiento demasiado profundo - la dependencia recursiva"

Ya ha recuperado la lista completa, simplemente no puede mostrar una parte (la que contiene una recursividad, porque tendría tiempo de espera en lugar de algo significativo).

Cuando se trata de $_REQUEST, que es un derivado de $_GET, $_POST y $_COOKIE, por lo que su contenido es redundante.

EDITAR: Hay an old bug/feature, que parece estar poblando $GLOBALS con $_SERVER y $_REQUEST cuando se accede a ellos. Intente acceder al $_REQUEST y espero que ayude. De todos modos, se puede encontrar en $GLOBALS después de eso: ideone.com/CGetH

+0

miré esa parte ya ... mi pregunta es cuando su salida para _POST, etc. al menos en una sola ejecución podría tener que publicar el $ _REQUEST, $ _SERVER? también – swapnesh

+0

@swapnesh: Hay [un viejo error/función] (https://bugs.php.net/bug.php?id = 29176), que parece estar poblando '$ GLOBALS' con' $ _SERVER' y '$ _REQUEST' cuando se accede a ellos. Intente acceder a '$ _REQUEST' y espero que ayude. De todos modos, se puede encontrar en '$ GLOBALS' después de eso: http://ideone.com/CGetH – Tadeck

+0

agrégalo a tu respuesta y luego lo llamaré ..thx para la información hermano :) – swapnesh

0

Cuando tiene un objeto apuntando hacia sí mismo ... es decir, simplemente va en círculos.

+0

¿qué hay del 2,3 punto :) – swapnesh

2

$GLOBALS se presenta como una matriz. En the PHP reference se puede encontrar la definición de $GLOBALS:

Una matriz asociativa que contiene referencias a todas las variables que están definidas actualmente en el ámbito global del script. Los nombres de las variables son las claves de la matriz.

Por lo tanto, tiene que contener también a sí mismo, lo que conduce a una recursión.

Las otras matrices probablemente solo estén vacías, ya que no ha sucedido nada más en el script.

Hay una vieja broma sobre la recursión: "Para comprender la recursión, debe comprender la recursión".

BTW: Emite _SERVER en mi computadora.

+1

+1 por la vieja broma :) – swapnesh

+1

Ha ... Acabo de descubrir que PHP en sí es un acrónimo Recursivo, ya que representa el Preprocesador de Hipertexto PHP ... nunca antes lo había notado. Obtuve el efecto Wikipedia :-) http://xkcd.com/214/ – ChaosCakeCoder

+0

sí, muy cierto y gracias a otro enlace fascinante :) – swapnesh