Tipos de variables PHP: local, global o superglobal

Aprende a diferenciar las variables de uso local, global y superglobal php.

Tag PHP tipos de variables objetos php

En PHP, como en otros lenguajes de programación como puede ser Javascript, el lugar dónde creemos nuestras variables o la forma de hacerlo definirán su disponibilidad.

¿Que es el ámbito de una variable php?

El ámbito de una variable podríamos definirlo como el grado de disponibilidad de esta a lo largo de nuestra programación. Este ámbito en PHP puede ser, principalmente, de 4 tipos:

  • Local
  • Global
  • Estático
  • Superglobal

En PHP podríamos definir el ámbito de una variable como el grado de disponibilidad de esta a lo largo de nuestra programación.

Variables de ámbito Local en php

Las variables de ámbito local son las que definimos dentro de una función, ya sea una función individual o perteneciente a una Clase phpQué estas variables son locales quiere decir que fuera de la función no existirán, ya que serán destruidas al terminar de ejecutarse el código de la funciónAdemás, si tuviéramos una variable creada fuera de la función con el mismo nombre estás dos variables serían totalmente distintas.

Un ejemplo podría ser el siguiente:

<?php
$var1 = 3;
function mostrar() {
    $var1 = 2;
    $var1 = 1;
    echo $var1 . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
?>

El código anterior demuestra el ámbito de la variable local creada en el interior de la función. Así, si ejecutáramos este pequeño script php la salida por pantalla sería:

3
1

Las variables locales son destruidas después de que la función sea ejecutada, es decir, cuando volvemos a llamar a la función esta vuelve a definirse con el primer valor que se le asigne, independientemente de las anteriores llamadas. Así llamadas continuas a la función del ejemplo anterior:

<?php
mostrar();
mostrar();
mostrar();
?>

Mostrarían la siguiente salida:

1
1
1

Variables estáticas en php

Las variables estáticas se definen dentro de una función con la palabra clave STATIC delante.

Las variables estáticas son un tipo de variable local especial, como una extensión de las variables locales de función pero que persisten tras la ejecución de la función que las contiene. Que la variable estática persista quiere decir que su último valor será el valor de la variable cuando volvamos a llamar a la función.

Veamos el siguiente ejemplo:

<?php
function incrementar(){
   STATIC $estatica1 = 1;
   $estatica++;
   echo $estatica. '<br/>';   
}
incrementar();
incrementar();
incrementar();
?>

Estas llamadas consecutivas producirán el incremento de la variable $estatica1 en cada llamada, ya que las variables estáticas solo se definen con la primera llamada a la función que las define. La salida sería:

2
3

Variables de ámbito Global en php

A diferencia de las variables de ámbito local, las variables de ámbito global, también llamadas globales, son accesibles en cualquier en cualquier lugar de nuestra aplicación

Crear una variable global es tan sencillo como definirla en cualquier lugar de nuestra aplicación que NO sea:

  • Una función, ya sea como parámetro de entrada o no
  • Un método de una Clase php
  • Como parámetro de una clase

Así en este ejemplo estaría creando una variable global:

<?php
$miVarGlobal = 1;
?>

Ahora que ya sabemos crear variables globales hay que puntualizar un dato, y es que en el interior de funciones o métodos de clases, estas variables son por defecto invisibles. Así si volvemos a revisar el ejemplo del punto anterior:

<?php
$var1 = 3;
function mostrar() {
    $var1 = 2;
    $var1 = 1;
    echo $var1 . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
?>

Como ves hay una variable $var1 que es definida primero como global, y en el interior de la función como local. ¿Cómo puede ser que hayamos creado esta variable de forma local y global a la vez? Pues verás, como te decía, las variables globales, por defecto, son invisibles para las funciones.

La palabra clave GLOBAL

Si quisiéramos que la función tuviera acceso a la variable global deberíamos especificarlo con la palabra clave GLOBAL:

<?php
$var1 = 3;
function mostrar() {
    GLOBAL $var1;
    $var1 = 1;
    echo $var1 . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
echo $var1 . '<br/>';
?>

Así en este ejemplo la salida por pantalla sería la siguiente:

3
1
1

Las dos últimas líneas explican el nuevo comportamiento de la variable en el interior de la función. Como he escrito la palabra clave GLOBAL delante del nombre, lo que he indicado es que quiero utilizar la variable global disponible en vez de definir una nueva.

La variable $GLOBALS

Para acceder a las variables globales de nuestro desarrollo, a parte de utilizar la palabra clave GLOBAL (también se puede escribir en minúsculas), también podemos recurrir al array $GLOBALS, indicando en la clave del array el nombre de la variable. El siguiente ejemplo ilustra este caso:

<?php
$var1 = 3;
function mostrar() {
    $GLOBALS['var1'] = 1;
    echo $GLOBALS['var1'] . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
echo $var1 . '<br/>';
?>

La salida de este ejemplo sería exactamente la misma que la del anterior:

3
1
1

Variables de ámbito superglobal

Las variables con mayor disponibilidad son las de ámbito superglobal, ¿Por qué se llaman superglobal? Pues porque a diferencia de las globales estas variables son accesibles en cualquier punto de nuestra programación y además no es necesario utilizar la palabra clave GLOBAL en el interior de las funciones o métodos.

Variables de ámbito superglobal son por ejemplo:

  • Los arrays de información de formularios $_GET, $_POST, $_REQUEST, $_FILES
  • Variables de información del servidor $_SERVER
  • Array de variables globales $GLOBALS
  • Variable de sesión y cookies $_SESSION y $_COOKIE
  • Constantes definidas mediante la función define()

Estas variables son accesibles en cualquier punto de nuestra programación y además no es necesario utilizar la palabra clave GLOBAL en el interior de las funciones o métodos

Extra: Variables locales de Clase o Atributos de Clase

Cuando trabajamos con php en Programación Orientada a Objetos (POO) aparece una clase de variable de ámbito algo distinto a las variables locales de funciones. Estas variables o atributos (como se les denomina), son accesibles en todo el código de la clase, así que se comparten entre todos los métodos (funciones del objeto).

Los atributos de Clase solo son accesibles indicando delante la palabra clave $this-> en cualquiera de sus métodos.

<?php
$var1 = 3;
function mostrar() {
    $var1 = 2;
    $var1 = 1;
    echo $var1 . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
?>

El código anterior demuestra el ámbito de la variable local creada en el interior de la función. Así, si ejecutáramos este pequeño script php la salida por pantalla sería:

3
1

Las variables locales son destruidas después de que la función sea ejecutada, es decir, cuando volvemos a llamar a la función esta vuelve a definirse con el primer valor que se le asigne, independientemente de las anteriores llamadas. Así llamadas continuas a la función del ejemplo anterior:

<?php
mostrar();
mostrar();
mostrar();
?>

Mostrarían la siguiente salida:

1
1
1

Variables estáticas en php

Las variables estáticas se definen dentro de una función con la palabra clave STATIC delante.

Las variables estáticas son un tipo de variable local especial, como una extensión de las variables locales de función pero que persisten tras la ejecución de la función que las contiene. Que la variable estática persista quiere decir que su último valor será el valor de la variable cuando volvamos a llamar a la función.

Veamos el siguiente ejemplo:

<?php
function incrementar(){
   STATIC $estatica1 = 1;
   $estatica++;
   echo $estatica. '<br/>';   
}
incrementar();
incrementar();
incrementar();
?>

Estas llamadas consecutivas producirán el incremento de la variable $estatica1 en cada llamada, ya que las variables estáticas solo se definen con la primera llamada a la función que las define. La salida sería:

2
3

Variables de ámbito Global en php

A diferencia de las variables de ámbito local, las variables de ámbito global, también llamadas globales, son accesibles en cualquier en cualquier lugar de nuestra aplicación

Crear una variable global es tan sencillo como definirla en cualquier lugar de nuestra aplicación que NO sea:

  • Una función, ya sea como parámetro de entrada o no
  • Un método de una Clase php
  • Como parámetro de una clase

Así en este ejemplo estaría creando una variable global:

<?php
$miVarGlobal = 1;
?>

Ahora que ya sabemos crear variables globales hay que puntualizar un dato, y es que en el interior de funciones o métodos de clases, estas variables son por defecto invisibles. Así si volvemos a revisar el ejemplo del punto anterior:

<?php
$var1 = 3;
function mostrar() {
    $var1 = 2;
    $var1 = 1;
    echo $var1 . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
?>

Como ves hay una variable $var1 que es definida primero como global, y en el interior de la función como local. ¿Cómo puede ser que hayamos creado esta variable de forma local y global a la vez? Pues verás, como te decía, las variables globales, por defecto, son invisibles para las funciones.

La palabra clave GLOBAL PHP

Si quisiéramos que la función tuviera acceso a la variable global deberíamos especificarlo con la palabra clave GLOBAL:

<?php
$var1 = 3;
function mostrar() {
    GLOBAL $var1;
    $var1 = 1;
    echo $var1 . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
echo $var1 . '<br/>';
?>

Así en este ejemplo la salida por pantalla sería la siguiente:

3
1
1

Las dos últimas líneas explican el nuevo comportamiento de la variable en el interior de la función. Como he escrito la palabra clave GLOBAL delante del nombre, lo que he indicado es que quiero utilizar la variable global disponible en vez de definir una nueva.

La variable $GLOBALS

Para acceder a las variables globales de nuestro desarrollo, a parte de utilizar la palabra clave GLOBAL (también se puede escribir en minúsculas), también podemos recurrir al array $GLOBALS, indicando en la clave del array el nombre de la variable. El siguiente ejemplo ilustra este caso:

<?php
$var1 = 3;
function mostrar() {
    $GLOBALS['var1'] = 1;
    echo $GLOBALS['var1'] . '<br/>';
}
echo $var1 . '<br/>';
mostrar();
echo $var1 . '<br/>';
?>

La salida de este ejemplo sería exactamente la misma que la del anterior:

3
1
1

Variables de ámbito superglobal PHP

Las variables con mayor disponibilidad son las de ámbito superglobal, ¿Por qué se llaman superglobal? Pues porque a diferencia de las globales estas variables son accesibles en cualquier punto de nuestra programación y además no es necesario utilizar la palabra clave GLOBAL en el interior de las funciones o métodos.

Variables de ámbito superglobal son por ejemplo:

  • Los arrays de información de formularios $_GET, $_POST, $_REQUEST, $_FILES
  • Variables de información del servidor $_SERVER
  • Array de variables globales $GLOBALS
  • Variable de sesión y cookies $_SESSION y $_COOKIE
  • Constantes definidas mediante la función define()

Estas variables son accesibles en cualquier punto de nuestra programación y además no es necesario utilizar la palabra clave GLOBAL en el interior de las funciones o métodos

Extra: Variables locales de Clase o Atributos de Clase

Cuando trabajamos con php en Programación Orientada a Objetos (POO) aparece una clase de variable de ámbito algo distinto a las variables locales de funciones. Estas variables o atributos (como se les denomina), son accesibles en todo el código de la clase, así que se comparten entre todos los métodos (funciones del objeto).

Los atributos de Clase solo son accesibles indicando delante la palabra clave $this-> en cualquiera de sus métodos.

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.