PHP global – alcance o ámbito de las variables
En PHP la mayoría de las variables está en un ámbito simple, por ejemplo:
Ambito simple<?php $variable = "hola mundo"; include "archivo.php"; ?>
La variable $variable
estará disponible incluso en archivo.php, excepto en las funciones, dentro de una función las variables son locales.
Todas las variables dentro de una función tendrán alcance local, con una excepción y es que si la variable pasada en parámetro está pasada por referencia, esta cambiará su valor fuera de la función.
Como vimos en el apartado de funciones en PHP podemos pasar por parámetro la variable y así interactuar con ella.
El uso de use
También desde PHP 7 podemos usar use
en la función lo cual nos permite usar una variable de ámbito padre en las funciones anónimas.
<?php $message ="mort dijo: Hola tu"; $example = function () use ($message): string { return $message; }; echo $example();
vea que en echo estamos utilizando $example() use en vez de $example esto se debe que, $example es un objeto de tipo closure no el resultado de la función anonima.
La palabra global y $_GLOBAL
Dentro de una función nombrada podemos usar la palabra clave global
, y asi acceder a la variable global.
Tenga en cuanta que aunque global nos permite usar una variable global y cambiarla pasarla por referencia, también lo hace. Además las variables pasadas por referencia nos da un indicio de lo que estamos utilizando.
ejemplo usando global<?php function cambioDeTexto(){ global $a; $a = "Bienvenido"; } $a = "hello word"; echo "<p>$a</p>"; cambioDeTexto(); echo "<p>$a</p>";
hello word Bienvenido
Si ejecuta el siguiente código y se fija el valor de la variable $a
ya no será "hello word"
será "Bienvenido"
, ya que estamos interactuando con la variable $a
del ámbito padre.
A en este caso es una variable global.
Si hacemos un echo
o un print
de $GLOBALS["a"]
veremos que la variable $a
está en las variables globales.
Ahora usted estará pensando si declaro $a
o cualquier otra variable en el ámbito simple es global?. Simplemente le diré probémoslo.
<?php $a = "hola"; echo $GLOBALS["a"];
hola