$GLOBALS

(PHP 4, PHP 5, PHP 7, PHP 8)

$GLOBALSReferencia todas variáveis disponíveis no escopo global

Descrição

Um array associativo contendo referências para todas as variáveis que estão atualmente definidas no escopo global do script. O nome das variáveis são chaves do array.

Exemplos

Example #1 Exemplo da $GLOBALS

<?php

function teste()
{
    $foo = "variável local";

    echo '$foo no escopo global: ' . $GLOBALS["foo"] . "\n";
    echo '$foo no escopo atual: ' . $foo . "\n";
}

$foo = "Conteúdo de exemplo";
teste();

?>

O exemplo acima produzirá algo semelhante a:

$foo no escopo global: Conteúdo de exemplo
$foo no escopo atual: variável local
Warning

A partir do 8.1.0, acesso de escrita a todo o array $GLOBALS não é mais suportado:

Example #2 Escrever em todo o $GLOBALS irá resultar em um erro.

<?php

// Gera um erro em tempo de compilação:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...e qualquer outra operação de escrita/leitura em $GLOBALS

?>

Notas

Note:

Esta é uma variável 'superglobal' ou variável global automática. Isso significa simplesmente que ela está disponível em todos os escopos de um script. Não há necessidade de usar global $variable; para acessá-la dentro de funções ou métodos.

Note: Disponibilidade da variável

Diferente de todas as outras superglobais, $GLOBALS tem essencialmente sempre estado disponível no PHP.

Note:

A partir do PHP 8.1.0, $GLOBALS agora é uma cópia somente-leitura da tabela de símbolos globais. Isto é, variáveis globais não podem ser modificadas por meio de suas cópias. Anteriormente, o array $GLOBALS era excluído do comportamento usual "por valor" dos arrays PHP e variáveis globais podiam ser modificadas por meio de suas cópias.

<?php

// Antes do PHP 8.1.0
$a = 1;

$globals = $GLOBALS; // Cópia ostensiva "por valor"
$globals['a'] = 2;
var_dump($a); // int(2)

// A partir do PHP 8.1.0,
// isto não mais modifica $a. O comportamento anterior violava a semântica "por valor".
$globals = $GLOBALS;
$globals['a'] = 1;

// Para restaurar o comportamento anterior, itera sua cópia e atribui cada propriedade de volta ao $GLOBALS.
foreach ($globals as $key => $value) {
    $GLOBALS[$key] = $value;
}

?>