Entendendo Superglobais PHP e a Variável $_GLOBALS
PHP é uma linguagem de script server-side popular para desenvolvimento web, que fornece superglobais — variáveis embutidas sempre disponíveis em todos os escopos.
Em PHP, uma variável declarada fora de qualquer função vive no escopo global. Por padrão, o código dentro de uma função não pode acessar essas variáveis — o PHP mantém o escopo de função separado para que a lógica local não sobrescreva acidentalmente dados não relacionados. O array $GLOBALS é uma forma de cruzar essa fronteira: é uma superglobal embutida que contém uma referência a cada variável definida no escopo global, indexada pelo nome da variável.
Esta página explica o que é $GLOBALS, como ela difere da palavra-chave global, como ler e modificar variáveis globais por meio dela, e por que você geralmente deve optar por uma alternativa. Se você é novo ao conceito de escopo, comece com Escopo de Variáveis e Variáveis PHP.
O que são Superglobais PHP?
Superglobais são variáveis PHP especiais e predefinidas que estão disponíveis em todos os escopos de um script. Você pode lê-las dentro de qualquer função, método ou arquivo incluído sem antes declará-las com global. Elas são preenchidas automaticamente pelo PHP antes que seu código seja executado.
A lista completa de superglobais:
$_GET— dados passados via string de consulta da URL.$_POST— dados passados via envio de formulário.$_COOKIE— dados passados via cookies.$_SESSION— dados armazenados na sessão do usuário.$_REQUEST— dados combinados de$_GET,$_POSTe$_COOKIE.$_SERVER— informações sobre o servidor e o ambiente de execução.$_ENV— variáveis de ambiente.$_FILES— itens enviados via formulário HTTPPOST.$GLOBALS— uma referência a cada variável no escopo global.
Para um panorama das superglobais relacionadas a requisições, veja Superglobais PHP.
O que é a Variável $GLOBALS em PHP?
$GLOBALS é um array associativo cujas chaves são os nomes de suas variáveis globais (sem o $ inicial) e cujos valores são referências a essas variáveis. Por ser uma superglobal, funciona em qualquer lugar — portanto, $GLOBALS['x'] acessa o mesmo armazenamento que o $x de nível superior, independentemente de onde no script você o acesse.
Veja um exemplo de como a variável $GLOBALS pode ser usada para acessar uma variável global:
Exemplo PHP de como a variável $GLOBALS pode ser usada para acessar uma variável global
<?php
$x = 10;
$y = 20;
function add() {
global $x, $y;
return $x + $y;
}
echo add(); // 30
echo $GLOBALS['x']; // 10
echo $GLOBALS['y']; // 20
?>Neste exemplo, a função add() usa a palavra-chave global para acessar as variáveis $x e $y. Fora da função, $GLOBALS['x'] e $GLOBALS['y'] acessam exatamente as mesmas variáveis — sem necessidade de declaração global.
$GLOBALS vs. a palavra-chave global
Essas duas abordagens fazem o mesmo trabalho, mas de formas diferentes:
- A palavra-chave
globalimporta uma variável global para o escopo local, criando um alias local que você então usa pelo nome normal ($x). Você deve listar cada variável que deseja. $GLOBALSé um array que você indexa pelo nome ($GLOBALS['x']). Você não precisa declarar nada, e pode construir a chave dinamicamente (por exemplo,$GLOBALS[$name]).
<?php
$total = 100;
function withGlobalKeyword() {
global $total;
return $total; // uses the local alias
}
function withGlobalsArray() {
return $GLOBALS['total']; // indexes the superglobal directly
}
echo withGlobalKeyword(); // 100
echo "\n";
echo withGlobalsArray(); // 100
?>Ambas imprimem 100. Prefira a que for mais legível — mas note que, a partir do PHP 8.1, não é mais possível reatribuir o array $GLOBALS como um todo (por exemplo, $GLOBALS = [...]). Escrever em elementos individuais como $GLOBALS['x'] = 5 ainda funciona.
Como Usar a Variável $GLOBALS em PHP
A variável $GLOBALS é uma ferramenta poderosa na programação PHP que pode ser usada para acessar variáveis globais de qualquer parte do seu script. Veja algumas formas de usar a variável $GLOBALS:
Acessando Variáveis Globais
Como vimos no exemplo anterior, você pode usar a variável $GLOBALS para acessar qualquer variável global definida no seu script. Veja outro exemplo:
PHP para acessar qualquer variável global definida no seu script
Modificando Variáveis Globais
A variável $GLOBALS também pode ser usada para modificar variáveis globais. Isso pode ser útil se você precisar fazer alterações em uma variável global de dentro de uma função ou classe.
Veja um exemplo:
PHP para modificar variáveis globais
<?php
$counter = 0;
function increment() {
global $counter;
$counter++;
}
increment();
echo $counter; // 1
echo "\n";
$GLOBALS['counter'] = 10;
echo $counter; // 10
?>Neste exemplo, a função increment() incrementa o valor da variável $counter. No entanto, você também pode modificar o valor da variável $counter diretamente por meio da variável $GLOBALS.
Passar Variáveis entre Funções e Classes
A variável $GLOBALS também pode ser usada para passar variáveis entre funções e classes. Isso pode ser útil se você precisar compartilhar dados entre diferentes partes do seu script.
Veja um exemplo:
PHP passando variáveis globais entre funções e classes
<?php
$data = array("name" => "John Doe", "age" => 30);
function display_data() {
global $data;
print_r($data);
}
class User {
function show_data() {
global $data;
print_r($data);
}
}
display_data(); // Array ( [name] => John Doe [age] => 30 )
$user = new User();
$user->show_data(); // Array ( [name] => John Doe [age] => 30 )
$GLOBALS['data']['email'] = "[email protected]";
display_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
$user->show_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
?>Neste exemplo, a função display_data() e a classe User acessam a variável $data por meio da variável $GLOBALS. Isso permite passar a variável $data entre as diferentes partes do seu script.
Conclusão
A variável $GLOBALS é uma ferramenta poderosa na programação PHP que fornece acesso a todas as variáveis globais definidas em um script PHP. Seja para acessar, modificar ou passar variáveis entre funções e classes, a variável $GLOBALS é uma ferramenta versátil que pode ajudá-lo a escrever um código PHP melhor.
Nota sobre boas práticas: Embora $GLOBALS seja útil, depender fortemente de variáveis globais é geralmente desencorajado no desenvolvimento PHP moderno. O estado global torna o código mais difícil de testar e compreender, porque qualquer função pode alterar silenciosamente um valor do qual outra parte do programa depende. Prefira passar variáveis como argumentos de função, retornar valores ou usar propriedades de classe para melhor encapsulamento e testabilidade. Recorra a $GLOBALS principalmente para scripts rápidos ou ao interoperar com código legado.