Guía y comprobaciones
Una función tiene su propio alcance
Una variable creada fuera de una función no pasa automáticamente a su interior. global $contador enlaza el nombre local con la variable global del mismo nombre. No crea una copia independiente. Esto puede servir al mantener código existente, pero hace más difícil saber qué cambia al llamar a una función.
$contador = 0;
function registrarVisita(): void {
global $contador;
$contador++;
}
registrarVisita();
registrarVisita();
echo $contador, PHP_EOL; // 2
Pasar lo necesario
Cuando la operación sólo necesita un valor, una función que recibe y devuelve ese valor es más fácil de reutilizar. El resultado no depende de que otro archivo haya inicializado una variable con el mismo nombre.
function incrementar(int $actual, int $paso = 1): int {
return $actual + $paso;
}
$contador = incrementar(0, 2);
echo $contador, PHP_EOL; // 2
Si varias operaciones comparten un estado complejo, un objeto puede agruparlo. No hace falta convertir cada variable en una clase: empieza por identificar quién la escribe y quién la lee. Una constante sirve para una configuración realmente fija, no para reemplazar un contador que cambia.
Qué aporta $GLOBALS
$GLOBALS['contador'] permite acceder al espacio global por clave desde la función. No lo confundas con una variable de sesión ni con un almacenamiento compartido entre solicitudes. En un sitio PHP habitual, un contador global no conserva visitas tras terminar la petición. Para ese fin necesitas un almacenamiento adecuado y operaciones concurrentes seguras.
Al depurar, busca las asignaciones además de las lecturas. Una función puede devolver el resultado correcto y dejar un estado global que afecte a la siguiente llamada. Prueba dos llamadas consecutivas y dos contadores separados: si no puedes aislarlos, la dependencia global forma parte del diseño y conviene hacerla explícita.
Preguntas frecuentes
¿global hace persistente una variable?
No. Cambia su alcance dentro de la ejecución actual; no equivale a guardar un dato en una base de datos o una sesión.
¿Debo usar global para la conexión PDO?
Puedes mantenerlo en código antiguo, pero pasar la conexión a la función u objeto hace visible esa dependencia y facilita probarla.
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.