Ámbito de las variables en PHP

  • Por
Explicamos con detalle el ámbito de existencia de una variable en PHP y distinguimos entre variables globales y locales.

En cualquier lenguaje de programación las variables tienen un ámbito, que es el lugar o lugares donde tienen validez. El ámbito varía en función de donde se hayan creado esas variables, pudiendo ser globales o locales.

En PHP, todas las variables creadas en la página, fuera de funciones, son variables globales a la página. Por su parte, las variables creadas dentro de una función son variables locales a esa función.

Las variables globales se pueden acceder en cualquier lugar de la página, mientras que las variables locales sólo tienen validez dentro de la función donde han sido creadas. De modo que una variable global la podemos acceder dentro de cualquier parte del código, mientras que si intentamos acceder a una variable local fuera de la función donde fue creada, nos encontraremos con que esa variable no tiene contenido alguno.

Ahora bien, si intentamos acceder a una variable global dentro de una función, en principio también nos encontraremos con que no se tiene acceso a su valor. Esto es así en PHP por motivos de claridad del código, para evitar que se pueda prestar a confusión el hecho de usar dentro de una función una variable que no ha sido declarada por ningún sitio cercano.

Nota: tal vez resulten desconocidos los conceptos sobre funciones, que se tratan más adelante en este manual: funciones en PHP

Entonces, si queremos utilizar una variable global a la página dentro de una función, tenemos que especificar de alguna manera que esa variable que vamos a utilizar es una global. Existen en PHP un par de maneras de utilizar variables globales a la página dentro de una función. Son las siguientes:

Matriz GLOBALS

Existe un array en PHP llamado $GLOBALS, que guarda una referencia a todas las variables creadas de manera global a la página. Es una matriz o array asociativo, de los que en lugar de índices numéricos utilizan índices de texto, donde cada índice es el nombre que hemos dado a la variable y cada valor es el contenido de cada variable.

Supongamos que tenemos esta declaración de variables globales a la página, es decir, fuera de cualquier función:

$mivariable = "pepe"; 
$otravariable = 1234;

Si queremos acceder a esas variables dentro de una función utilizando el array $GLOBALS tendríamos este código:

function mifuncion(){ 
  //estoy dentro de la función, para aceder a las variables utilizo $GLOBALS 
  echo $GLOBALS["mivariable"]; 
  echo $GLOBALS["otravariable"]; 
}

Como se puede ver, se accede al contenido de las variables globales con el array $GLOBALS, utilizando como índices de la matriz los nombres de variables que deseamos mostrar.

Esto imprimiría por pantalla el texto "pepe1234", el valor de las dos variables uno detrás del otro.

Declaración de uso de variables globales dentro de una función

Otra cosa que podemos hacer para acceder a variables globales dentro de una función es especificar al comienzo de dicha función la lista de variables que vamos a utilizar dentro. Para especificar esas variables utilizamos la palabra "global" seguida de la lista de variables que se van a utilizar del entorno global.

function mifuncion(){ 
  global $mivariable, $otravariable;
  //con esa línea dentro de la función, declaramos el uso de variables globales 
  echo $mivariable; 
  echo $otravariable; 
}

Como vemos, con "global" se especifica que vamos a utilizar unas variables que fueron declaradas como globales a la página. Una vez hecho esto, ya podemos acceder a esas variables globales como si estuvieran declaradas dentro de la función.

Cualquier alteración que hagamos a las variables dentro de la función permanecerá cuando se haya salido de la función, tanto si accedemos a través del array $GLOBALS o declarando con "global" el uso de esas variables.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Nicolás (México)

21/9/2006
Qué tal... hace ya 7 años que me metí a esto de PHP, y el día de hoy decidí meterme nuevamente a este sitio para ver que hay de novedades.. muchos saludos y gracias por tan valiosa información.

Hay un pequeño error de dedo en la sección "Declaración de uso de variables globales dentro de una función" en el ejemplo:

function mifuncion(){
golbal $mivariable, $otravariable
.....
}

dice "golbal" debería ser "global"

RESPUESTA

Está revisado. Muchas gracias por reportar el error.

andres

08/2/2007
Que tal nicolas, con que tutorial aprendistes tu? yo not engo idea y me gustaria encontrar algun tutorial basico y que sirva tambien para hacer consultas en sql.
muchas gracias

andresesteevz28@hotmail.com

Alex

07/5/2007
Una pregunta:

Hay alguna manera de usar una var global dentro de una función en JAVASCRIPT? veo que en PHP no es problema, pero necesito algo igual en JS.

lukasz

03/6/2009
variable global en servidor remoto cuando en php.ini register_globals = off
hola .
Que puedo hacer en este caso , como usar variables creadas fuera de la funccion.

function check_valid_user()
// see if somebody is logged in and notify them if not
{
global $valid_user;
if (session_is_registered("valid_user"))
{
echo "Logged in como ". $valid_user;//y no me reconoce $valid_user en //servidor remoto tampoco con $GLOBALS['valid_user']
echo "<br>";
//sin embargo la condicion se cumple.
}

Neo

21/7/2009
Falta un ; en el código de la función
En la Sección: Declaración de uso de variables globales dentro de una función falta un punto y coma al final de la línea:
global $mivariable, $otravariable

Yo se lo puse:
global $mivariable, $otravariable;

y funcionó de maravilla.

Dios los benidga por su gran trabajo en esta Web. Gracias.

galleta

13/8/2009
falta un punto y coma en el ejemplo
ya se que es basico pero para los que estamos empezando nos da error que no haya punto y coma al final de la linea de globals
un saludo

RubenDF

18/10/2009
Posición {}
Hola, solo me dejo funcionar este ejercicio planteandolo de esta manera:

function mifuncion() {
global $mivariable, $otravariable }
echo $mivariable;
echo $otravariable;

porque si dejo la posición de los corchetes {} como estan en el ejemplo me aparece la pantalla en blanco.

Gracias por tan excelentes herramientas

Juan Martín

27/4/2010
Gracias por la info!
me resulto muy útil esta información, hace un buen rato que estaba tratando de encontrar cual era el problema en mi función, y era que me habia faltado declarar las variables globales
gracias!

marizol

07/6/2010
tarea
Cuándo y cómo se utilizan variables globales y cuándo y cómo se utilizan variables locales?

Cristian

10/1/2011
articulo necesita actualización
buenas,estoy tratando de re entrar en el mundo php y estoy leyendo sus artículos,pero deberían actualizar un poco este pues,las variables globales en php5 ya no están activadas por seguridad.
muchas gracias por su atencion.

Joan Albert

28/1/2011
Esto no funciona
Porque no funciona??

<html>
<head>
<title>Recepcion</title>
</head>


<body>

<?php

$mivariable = "pepe";
$otravariable = 1234;


function mifuncion(){
//estoy dentro de la función, para aceder a las variables utilizo $GLOBALS
echo $GLOBALS["mivariable"];
echo $GLOBALS["otravariable"];
}





?>



</body>
</html>

Alexander

30/1/2011
Siiiiiii
Che que copado, después de programar toda la vida en c y romperme la cabeza con la visibilidad de las variables en php, tu articulo me salvo la vida

bernar

23/2/2011
ambitos variables
Tengo un proglema de ambitos de variables en php. realalizo unos calculos en un formulario y cuando les doy al boton -isset($guardar) llegan en blanco a dicha funcion.

Alexis Advance

11/11/2011
Aprendí gracias a ustedes
Gracias, chicos de Desarrolloweb. Tenía un problema al querer utilizar una variable global dentro de una función, y ahora sé cómo debo hacerlo.

Saludos cordiales.

Cromox

22/2/2012
No me funciona
Me aparece en blanco no se ya cambie de lugar todo no ahi caso!

<?

$mivariable = "pepe";
$otravariable = 1234;


function mifuncion(){
//estoy dentro de la función, para aceder a las variables utilizo $GLOBALS
echo $GLOBALS["mivariable"];
echo $GLOBALS["otravariable"];
}




?>

Mariano

16/3/2012
un pequeño error
function mifuncion(){
global $mivariable, $otravariable
//con esa línea dentro de la función, declaramos el uso de variables globales
echo $mivariable;
echo $otravariable;
}

a global le falta el punto y coma al final

la función completa quedaría así

function mifuncion(){
global $mivariable, $otravariable;
//con esa línea dentro de la función, declaramos el uso de variables globales
echo $mivariable;
echo $otravariable;
}

frankkoq

03/8/2012
Cromox te falto poner esto mifuncion(); al ultimo
<?

$mivariable = "pepe";
$otravariable = 1234;


function mifuncion(){
//estoy dentro de la función, para aceder a las variables utilizo $GLOBALS
echo $GLOBALS["mivariable"];
echo $GLOBALS["otravariable"];
}


mifuncion();

?>

Andrea

13/9/2013
Muy buena web
Recién estoy aprendiendo Php, estuve busque y busque un buen sitio pero al fin lo encontré. Muy buen tutorial.