Variables y Alcance
El alcance de las variables (o scope) determina dónde se pueden utilizar en tu código.
¿Qué es el alcance de una variable?
El alcance de una variable define desde qué partes de tu código puedes acceder a ella. Imagina que tu programa es una casa con muchas habitaciones: algunas variables solo existen en una habitación específica (alcance local), mientras que otras pueden pasearse por toda la casa (alcance global).
- Alcance global: Una variable creada fuera de funciones o clases está disponible en todo el script, excepto dentro de funciones.
- Alcance local: Una variable creada dentro de una función solo existe dentro de esa función y no puede usarse fuera.
Ejemplo: Variables globales y locales
Veamos un ejemplo para entender por qué las variables dentro y fuera de una función no se “ven” entre sí:
<?php
$pais = "España"; // Variable global
function mostrarPais() {
echo $pais; // ¡Error! $pais no está definida dentro de la función
}
mostrarPais(); // Esto genera un NOTICE (undefined variable)
echo $pais; // Imprime: España
?>
¿Qué pasó? La variable $pais
es global, pero dentro de la función
mostrarPais()
, PHP no puede acceder a ella automáticamente. Si ejecutas este código,
verás un mensaje de error (un NOTICE) porque $pais
no existe dentro de la función. Además, fuera de la función, $pais
se imprime correctamente porque está en el alcance
global.
Ahora, observa qué pasa si definimos una variable con el mismo nombre dentro de la función:
<?php
$pais = "España"; // Variable global
function mostrarPais() {
$pais = "Alemania"; // Variable local, distinta de la global
echo "Dentro de la función: $pais\n";
}
mostrarPais(); // Imprime: Dentro de la función: Alemania
echo "Fuera de la función: $pais\n"; // Imprime: Fuera de la función: España
?>
Explicación: La variable $pais
dentro
de la función es local y no afecta a la variable
$pais
global. Son como dos personas con el mismo nombre en
diferentes habitaciones.
La declaración global
Si queremos que una función acceda a una variable global, podemos usar la palabra clave global
.
Esto le dice a PHP: “usa la variable que está fuera de la función, no crees una nueva”.
<?php
$pais = "España"; // Variable global
function mostrarPais() {
global $pais; // Accedemos a la variable global
echo "Dentro de la función: $pais\n";
}
mostrarPais(); // Imprime: Dentro de la función: España
echo "Fuera de la función: $pais\n"; // Imprime: Fuera de la función: España
?>
Nota importante: Aunque global
funciona, no es la mejor práctica en PHP moderno. Usar global
puede hacer que tu código sea más difícil de entender y mantener. En su lugar, considera pasar variables como
parámetros a la función:
<?php
$pais = "España";
function mostrarPais($pais) {
echo "Dentro de la función: $pais\n";
}
mostrarPais($pais); // Imprime: Dentro de la función: España
echo "Fuera de la función: $pais\n"; // Imprime: Fuera de la función: España
?>
Este enfoque es más claro y evita sorpresas.
Variables estáticas
Normalmente, las variables dentro de una función se crean cuando la función empieza y se destruyen cuando termina. Pero, ¿qué pasa si queremos que una variable recuerde su valor entre varias llamadas a la función? Aquí entran las variables estáticas.
Una variable estática se declara con la palabra clave static
y conserva su valor incluso después de que la función termina. Veamos un ejemplo práctico:
<?php
function contador() {
static $a = 0; // Variable estática, inicializada solo la primera vez
echo "Contador: $a\n";
$a++; // Incrementamos el valor
}
contador(); // Imprime: Contador: 0
contador(); // Imprime: Contador: 1
contador(); // Imprime: Contador: 2
?>
Explicación: La variable $a
se inicializa en 0
la primera vez que se llama a contador()
. Luego, cada vez que llamamos a la función, $a
conserva su valor anterior y se incrementa. Esto es útil para contadores, acumuladores o cualquier caso donde quieras “recordar”
un valor.
Nota: Las variables estáticas solo conservan su
valor durante la ejecución de la página. Si recargas la página, el contador vuelve a empezar desde 0
.
Siguiente
Operadores aritméticos, lógicos, de comparación, y más,