Parece una pregunta rara, ¿no?
Seguro estás pensando «¿Dónde está la trampa?», ¿cierto?
En general se entiende que una variable global es aquella que está presente (es decir, puede ser leída y modificada) en cualquier lugar de un programa.
El caso de PHP es algo particular.
Para comenzar si hicieras algo como esto:
<?php $global = 'Soy una variable global'; function f() { echo '$global dentro de f vale: "'.$global.'"'.PHP_EOL; } echo '$global fuera de f vale: "'.$global.'"'.PHP_EOL; f();
Esperarías ver:
$global fuera de f vale: "Soy una variable global" $global dentro de f vale: "Soy una variable global"
Y sin embargo, si ejecutás este script verás:
$global fuera de f vale: "Soy una variable global" $global dentro de f vale: ""
Y, en el reporte de errores encontrarás:
PHP Notice: Undefined variable: global on line 7
Esto ocurre debido a que en PHP, si querés acceder a una variable definida fuera del ámbito de la función que se está ejecutando debés hacerlo en forma explícita.
Cómo usar variables globales en PHP
Hay dos formas de hacer esto.
La primera es referirte a la variable como un miembro del arreglo $GLOBALS
function f() { echo '$global dentro de f vale: "'.$GLOBALS['global'].'"'.PHP_EOL; }
La segunda es declarar que vas a usar una variable global:
function f() { GLOBAL $global; echo '$global dentro de f vale: "'.$global.'"'.PHP_EOL; }
Hasta aquí puede resultar algo raro, pero no deja de ser un tema de sintaxis… nada del otro mundo.
El problema se hace algo más complejo cuando pensamos en acceder a una variable definida en otro script, algo como:
script1.php
<?php $global = "Soy una variable global"; ?> <a href="script2.php">Ir al script 2</a>
script2.php
<?php echo '$global en script2 vale "'.$global.'"'.PHP_EOL;
Si accedés al script1.php
a través de un servidor web y hacés click en el link «Ir al script 2» te vas a encontrar con un error de que la variable $global
no está definida.
Y aquí es donde empiezan las confusiones.
¿Acaso script1.php
y script2.php
no forman parte de la misma aplicación?
Bueno… sí y no.
Conceptualmente todos los scripts que armaste para tu sitio están vinculados de alguna forma, por algo están todos ahí.
Sin embargo, a un nivel técnico no, cada script es independiente de su contexto.
Esto es así por el modelo de ejecución de PHP.
A diferencia de otros lenguajes o entornos donde la aplicación y el webserver son una y la misma cosa (NodeJs por ejemplo), en PHP la separación es muy clara.
Cada petición que recibe el servidor web (y que corresponde a un archivo php) es pasado a través de un hilo nuevo del intérprete.
Esto implica justamente que al finalizar un script todo el espacio de memoria utilizado por éste se destruye… incluso las variables globales 🙁
Entonces… ¿se puede compartir variables entre diferentes scripts de una aplicación PHP?
Sí, se puede.
Cómo compartir variables entre scripts de una aplicación PHP
Depende de cuál sea exactamente el resultado buscado existen diferentes formas de lograrlo.
Si lo que se busca es guardar variables que acompañen a un visitante a lo largo de su camino de navegación lo mejor es utilizar el mecanismo de sesiones.
Si lo que se busca es algo más abarcativo, como definir variables que perduren entre la ejecución de diferentes scripts aún cuando no se trate del mismo usuario, habrá que recurrir a algún medio de almacenamiento externo a PHP.
Entre ellos están los archivos, las bases de datos, espacios de memoria compartidos, etc…
Espero haber contribuido a aclarar un poco este punto que suele traer problemas cuando uno comienza su recorrido en el mundo del PHP.
- Cómo agregar una página de error 500 en un proyecto PHP - 31/10/2024
- ¿Cuántos contenedoresnecesita tu php? - 28/10/2024
- Cuál es el mejor framework PHP para hacer APIs REST - 25/10/2024
Buen post, gracias por compartir.