¿Por qué establecer la variable superglobal $GLOBALS['foo'] no funciona?

El siguiente código produce una advertencia:

<?php
$GLOBALS['foo'] = "Example content<BR><BR>";
echo $foo; // that works!
Test();

function Test()
{
    echo $foo; // that doesn't work!
}
?>

La advertencia es:

Notice: Undefined variable: foo

Cómo ?

preguntado el 31 de julio de 12 a las 13:07

3 Respuestas

Dentro de la función, $foo está fuera del alcance a menos que lo llame como $GLOBALS['foo'] vea la sección global $foo. Definiendo un global con $GLOBALS, aunque mejora la legibilidad, no reserva automáticamente el nombre de la variable para su uso en todos los ámbitos. Todavía necesita llamar explícitamente a la variable global dentro de los ámbitos inferiores para hacer uso de ella.

function Test()
{
    echo $GLOBALS['foo'];

    // Or less clear, use the global keyword
    global $foo;
    echo $foo;
}

Incluso es posible tener un local y un global $foo en la misma función (aunque no del todo recomendable):

$GLOBALS['foo'] = "foo! :)";
function getFoo()
{
  $foo = "boo :(";
  echo $GLOBALS['foo'] . "\n"; // Global $foo
  echo $foo;            // Local scope $foo since it has no global keyword
}

getFoo();
// foo! :) 
// boo :(

Lea las Documentación de PHP sobre alcance variable y $GLOBALS documentación para mas ejemplos

Respondido 31 Jul 12, 13:07

Deberá referirse a él a través de la matriz $GLOBALS todo el tiempo. Leer acerca de Alcance variable para obtener la respuesta descriptva completa.

<?php
$GLOBALS['foo'] = "Example content<BR><BR>";
echo $foo; // that works!
Test();

function Test()
{
    echo $GLOBALS['foo']; // that doesn't work!
}
?>

Respondido 31 Jul 12, 13:07

Puedes cambiar tu código a:

function Test() {
    global $foo;

    echo $GLOBALS['foo'];
    echo $foo;
}

debe declarar a qué variables globales accede desde su función PHP. Ver: http://php.net/manual/en/language.variables.scope.php

Respondido 31 Jul 12, 13:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.