Entendendo o Escopo de Variáveis em PHP
Em PHP, as variáveis possuem um escopo que determina onde podem ser acessadas e usadas no código. Esse escopo é definido pelo local onde a variável é declarada.
O escopo de uma variável é a parte do seu programa onde essa variável é visível e pode ser utilizada. Em PHP, o escopo é determinado por onde você declara a variável: uma variável criada no nível superior de um script é global, enquanto uma variável criada dentro de uma função é local a essa função. Crucialmente — e isso surpreende quem vem do JavaScript ou do Python — as funções PHP não enxergam automaticamente as variáveis do script ao redor. Cada função tem seu próprio conjunto privado de variáveis.
Esta página abrange os três escopos que você precisa no PHP do dia a dia — global, local e estático — além das duas formas de acessar um valor global de dentro de uma função (global e $GLOBALS), e quando é preferível passar argumentos em vez disso.
Variáveis Locais
Uma variável atribuída dentro de uma função tem escopo local: ela existe apenas enquanto a função está em execução e é invisível em qualquer outro lugar. Este é o padrão e o escopo que você deve usar com mais frequência, pois mantém as funções autocontidas e previsíveis.
<?php
function myFunction() {
$x = 10; // local to myFunction()
echo $x; // works: prints 10
}
myFunction();
echo $x; // Warning: Undefined variable $x
?>O segundo echo falha porque $x nunca existiu fora da função. O inverso também é verdadeiro: um $x definido no script principal não é visível dentro de myFunction() a menos que você o traga explicitamente. Variáveis locais são ideais para contadores, resultados intermediários e qualquer coisa temporária que você não quer que vaze para o restante do programa.
Variáveis Globais
Uma variável declarada no nível superior de um script — fora de qualquer função — tem escopo global. Apesar do nome, ela não está disponível automaticamente dentro das funções. Para lê-la ou modificá-la de dentro de uma função, você deve trazê-la para o escopo com a palavra-chave global.
Sem a linha global $x;, o $x dentro da função seria uma variável local separada e indefinida. A palavra-chave global vincula o nome local ao global, portanto as alterações feitas dentro da função afetam o valor fora dela também.
O array $GLOBALS
PHP também armazena todas as variáveis globais em um array superglobal embutido chamado $GLOBALS, indexado pelo nome da variável. Como os superglobais são visíveis em todos os escopos, isso oferece uma segunda forma de acessar um global sem a palavra-chave global:
<?php
$x = 5;
$y = 10;
function addNumbers() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addNumbers();
echo $z; // Outputs 15
?>Aqui $z é criado no escopo global de dentro da função. $GLOBALS é útil quando você precisa de vários globais de uma vez, mas tem as mesmas desvantagens do global.
Use globais com moderação
Os globais criam dependências ocultas e de longa distância: qualquer função pode alterá-los, tornando um bug difícil de rastrear. Prefira passar valores como argumentos e retornar resultados, o que mantém as entradas e saídas de cada função explícitas:
<?php
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, 10); // Outputs 15
?>Recorra ao global ou ao $GLOBALS apenas para configurações genuinamente globais do programa, e não como atalho para evitar passar dados.
Variáveis Estáticas
Normalmente uma variável local é destruída quando a função retorna, então ela começa do zero na próxima chamada. Uma variável estática é a exceção: declarada com a palavra-chave static, ela mantém seu valor entre chamadas enquanto ainda permanece local (invisível fora da função). É perfeita para lembrar o estado entre chamadas — por exemplo, contar quantas vezes uma função foi executada.
O inicializador static $x = 0; é executado apenas na primeira chamada; nas chamadas seguintes, o PHP o ignora e reutiliza o valor armazenado.
As variáveis estáticas são declaradas usando a palavra-chave static e são acessíveis apenas dentro da função onde foram declaradas.
Conclusão
Em conclusão, as variáveis em PHP possuem um escopo que determina onde podem ser acessadas e utilizadas. Compreender os diferentes tipos de escopos, como global, local e estático, pode ajudá-lo a escrever um código mais eficiente e eficaz. Ao usar o escopo adequado para suas variáveis, você garante que seu código seja organizado e fácil de manter.