PHP possui três tipos de escopo de variável:

  1. O global
  2. O interno na função
  3. O da classe

O global, como o próprio nome indica, disponível para todas as partes do script, se você declarar ou atribuir um valor a uma variável fora de uma função ou classe, essa variável será criada no âmbito global.

OBS: Irei falar sobre o escopo da classe mais a frente, quando estiver falando sobre orientação a objetos.

No entanto, cada vez que entra uma função, PHP cria um novo escopo, que, por padrão, não contém qualquer variável e que está completamente isolado da parte externa da função. Qualquer variável definida dentro de uma função já não está disponível após a função tiver terminado a execução. Isso permite a utilização de nomes que podem estar em uso em outro lugar sem ter que se preocupar com os conflitos.

<?
$a = “Olá mundo”;
function ola()
{
$a = “Olá leitor,”;
$b = “Como vai você?”;

echo $a . ” ” . $b . “<br/>”;
}
ola(); // Irá imprimir Olá Leitor, Como vai você?
echo $a; // Irá imprimir olá mundo
echo $b; // Irá emitir um warning
?>

Há duas maneiras de acessar variáveis no escopo global dentro de uma função:

A primeira consiste em “importar” a variável dentro do escopo da função, utilizando a declaração global:

<?
$a = “Olá”;
$b = “Mundo”;
function ola()
{
global $a, $b;
echo “$a $b”;
}
ola(); // Exibe “Olá Mundo”
?>

Você vai perceber que tem uma lista global de variáveis separadas por vírgula para ser importado.
Naturalmente, você pode ter muitas declarações globais dentro de uma mesma função, com isso muitos desenvolvedores acham que o uso do global introduz um elemento de confusão no seu código, e que “junta” escopo de uma função com o escopo global podendo facilmente ser uma fonte de problemas. Eles preferem, em vez disso, para usar a matriz super global $GLOBALS, que contém todas as variáveis no escopo global:

<?
$a = “Olá”;
$b = “Mundo”;
function ola()
{
echo $GLOBALS["a"] .” “. $GLOBALS["b"];
}
ola(); // Exibe “Olá Mundo”
?>