Entendiendo el Ámbito de Variables en PHP
En PHP, las variables tienen un ámbito que determina dónde pueden ser accedidas y usadas dentro del código. Este ámbito lo define el lugar donde se declara la variable.
El ámbito de una variable es la parte del programa donde esa variable es visible y puede utilizarse. En PHP, el ámbito se determina por dónde declares la variable: una variable creada en el nivel superior de un script es global, mientras que una variable creada dentro de una función es local a esa función. Crucialmente — y esto sorprende a quienes vienen de JavaScript o Python — las funciones de PHP no ven automáticamente las variables del script que las rodea. Cada función obtiene su propio conjunto privado de variables.
Esta página cubre los tres ámbitos que necesitas en el día a día con PHP — global, local y estático — además de las dos formas de acceder a un valor global desde dentro de una función (global y $GLOBALS), y cuándo es preferible pasar argumentos en su lugar.
Variables Locales
Una variable asignada dentro de una función tiene ámbito local: existe únicamente mientras esa función se ejecuta y es invisible en cualquier otro lugar. Este es el comportamiento predeterminado y el ámbito que deberías usar con más frecuencia, porque mantiene las funciones autocontenidas y predecibles.
<?php
function myFunction() {
$x = 10; // local to myFunction()
echo $x; // works: prints 10
}
myFunction();
echo $x; // Warning: Undefined variable $x
?>El segundo echo falla porque $x nunca existió fuera de la función. Lo contrario también es cierto: una $x definida en el script principal no es visible dentro de myFunction() a menos que la introduzcas explícitamente. Las variables locales son ideales para contadores, resultados intermedios y cualquier valor temporal que no quieras que se filtre al resto del programa.
Variables Globales
Una variable declarada en el nivel superior de un script — fuera de cualquier función — tiene ámbito global. A pesar del nombre, no está disponible automáticamente dentro de las funciones. Para leerla o modificarla desde dentro de una función, debes traerla al ámbito con la palabra clave global.
Sin la línea global $x;, la $x dentro de la función sería una variable local separada e indefinida. La palabra clave global vincula el nombre local con el global, por lo que los cambios dentro de la función también afectan el valor fuera de ella.
El array $GLOBALS
PHP también almacena todas las variables globales en un array superglobal incorporado llamado $GLOBALS, indexado por nombre de variable. Como los superglobales son visibles en todos los ámbitos, esto te ofrece una segunda forma de acceder a un valor global sin necesidad de la palabra clave global:
<?php
$x = 5;
$y = 10;
function addNumbers() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addNumbers();
echo $z; // Outputs 15
?>Aquí $z se crea en el ámbito global desde dentro de la función. $GLOBALS es útil cuando necesitas varios valores globales a la vez, pero tiene los mismos inconvenientes que global.
Usa los globales con moderación
Los globales crean dependencias ocultas y de efecto a distancia: cualquier función puede modificarlos, lo que hace difícil rastrear un error. Es preferible pasar valores como argumentos y devolver resultados, lo que hace explícitas las entradas y salidas de cada función:
<?php
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, 10); // Outputs 15
?>Recurre a global o $GLOBALS solo para configuración verdaderamente global del programa, no como atajo para evitar pasar datos.
Variables Estáticas
Normalmente una variable local se destruye cuando la función retorna, por lo que comienza de nuevo en la siguiente llamada. Una variable estática es la excepción: declarada con la palabra clave static, conserva su valor entre llamadas mientras sigue siendo local (invisible fuera de la función). Es perfecta para recordar el estado entre llamadas — por ejemplo, contar cuántas veces se ha ejecutado una función.
El inicializador static $x = 0; se ejecuta solo en la primera llamada; en las llamadas posteriores PHP lo omite y reutiliza el valor almacenado.
Las variables estáticas se declaran usando la palabra clave static y solo son accesibles dentro de la función donde se declaran.
Conclusión
En conclusión, las variables en PHP tienen un ámbito que determina dónde pueden ser accedidas y utilizadas. Comprender los diferentes tipos de ámbitos, como global, local y estático, puede ayudarte a escribir código más eficiente y efectivo. Al usar el ámbito apropiado para tus variables, puedes asegurarte de que tu código esté organizado y sea fácil de mantener.