Estoy intentando pasar una variable de un archivo de inclusión a otro. Esto NO funciona a menos que declare la variable como global en el segundo archivo de inclusión. Sin embargo, NO necesito declararlo como global en el archivo que llama a la primera inclusión. Por ejemplo:
front.inc:
$name = 'james';
index.php:
include('front.inc');
echo $name;
include('end.inc');
salida: james
end.inc:
echo $name;
salida: nada
SI declaro global $ name antes de hacer eco de $ name en end.inc, entonces funciona correctamente. La respuesta aceptada a esta publicación explica que esto depende de la configuración de su servidor: Pasar variables en PHP de un archivo a otro
Estoy usando un servidor Apache. ¿Cómo lo configuraría para que no sea necesario declarar $ name como global? ¿Hay ventajas / desventajas de uno frente al otro?
Respuestas:
Cuando se incluyen archivos en PHP, actúa como si el código existiera dentro del archivo desde el que se incluyen. Imagínese copiar y pegar el código desde cada uno de sus archivos incluidos directamente en su
index.php
. Así es como funciona PHP con includes.Entonces, en su ejemplo, dado que estableció una variable llamada
$name
en sufront.inc
archivo, y luego incluyó ambosfront.inc
yend.inc
en suindex.php
, podrá usarecho
la variable en$name
cualquier lugar despuésinclude
defront.inc
dentro de suindex.php
. Nuevamente, PHP procesa suindex.php
como si el código de los dos archivos que está incluyendo fuera parte del archivo.Cuando coloca un
echo
dentro de un archivo incluido, en una variable que no está definida dentro de sí misma, no obtendrá un resultado porque se trata por separado que cualquier otro archivo incluido.En otras palabras, para realizar el comportamiento que espera, deberá definirlo como global.
fuente
included1.php
y hacer referencia a ella más adelanteincluded2.php
sin hacer referencia a ellaparent.php
, y obtener el valor que definíincluded1.php
. Sigo las mismas reglas de alcance que seguiría si el código estuviera todo en una sola página. Nada mas.Aquí hay una trampa que evitar. En caso de que necesite acceder a su variable $ nombre dentro de una función, debe decir "global $ name;" al comienzo de esa función. Debe repetir esto para cada función en el mismo archivo.
include('front.inc'); global $name; function foo() { echo $name; } function bar() { echo $name; } foo(); bar();
solo mostrará errores. La forma correcta de hacerlo sería:
include('front.inc'); function foo() { global $name; echo $name; } function bar() { global $name; echo $name; } foo(); bar();
fuente
global $var
antes de usarlo en otra función.Esto es todo lo que tienes que hacer:
En frente.inc
global $name; $name = 'james';
fuente