$GLOBALS

(PHP 4, PHP 5, PHP 7)

$GLOBALSСсылки на все переменные глобальной области видимости

Описание

Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.

Примеры

Пример #1 Пример $GLOBALS

<?php
function test() {
    
$foo "local variable";

    echo 
'$foo in global scope: ' $GLOBALS["foo"] . "\n";
    echo 
'$foo in current scope: ' $foo "\n";
}

$foo "Example content";
test();
?>

Результатом выполнения данного примера будет что-то подобное:

$foo in global scope: Example content
$foo in current scope: local variable

Примечания

Замечание:

Это 'суперглобальная' или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.

Замечание: Доступность переменной

В отличии от всех остальных суперглобальных переменных, $GLOBALS всегда доступна в PHP.

Коментарии

As of PHP 5.4 $GLOBALS is now initialized just-in-time. This means there now is an advantage to not use the $GLOBALS variable as you can avoid the overhead of initializing it. How much of an advantage that is I'm not sure, but I've never liked $GLOBALS much anyways.
2011-06-29 09:32:33
http://php5.kiev.ua/manual/ru/reserved.variables.globals.html
Watch out when you are trying to set $GLOBALS to the local variable.

Even without reference operator "&" your variable seems to be referenced to the $GLOBALS

You can test this behaviour using below code

<?php
/**
 * Result:
 * POST: B, Variable: C
 * GLOBALS: C, Variable: C
 */
 
// Testing $_POST
$_POST['A'] = 'B';
 
$nonReferencedPostVar $_POST;
$nonReferencedPostVar['A'] = 'C';
 
echo 
'POST: '.$_POST['A'].', Variable: '.$nonReferencedPostVar['A']."\n\n";
 
// Testing Globals
$GLOBALS['A'] = 'B';
 
$nonReferencedGlobalsVar $GLOBALS;
$nonReferencedGlobalsVar['A'] = 'C';
 
echo 
'GLOBALS: '.$GLOBALS['A'].', Variable: '.$nonReferencedGlobalsVar['A']."\n\n";
2013-06-11 20:58:28
http://php5.kiev.ua/manual/ru/reserved.variables.globals.html
I finally found information about superglobals not being found in $GLOBALS:

https://bugs.php.net/bug.php?id=65223&edit=2
-------------------------------------
 [2013-07-09 12:00 UTC] johannes @php.net
[...]super-globals (aka. auto globals) are not added to symbol tables by default for performance reasons unless the parser sees need. i.e. 

<?php
$_SERVER
;
print_r($GLOBALS);
?>

will list it. You can also control this using auto_gloals_jit in php.ini: ini.core#ini.auto-globals-jit
-------------------------------------

language.variables.variable
-------------------------------------
Warning
Please note that variable variables cannot be used with PHP's Superglobal arrays within functions or class methods. The variable $this is also a special variable that cannot be referenced dynamically.
-------------------------------------
2016-10-21 02:31:40
http://php5.kiev.ua/manual/ru/reserved.variables.globals.html
We can be more clear with the extension of the given example.

Before PHP Version 8.1

<?php
  $a 
1;
 
$globals $GLOBALS;
 
$globals['a'] = 2;
  echo 
$a// 2
 
echo $globals['a']; // 2
 
echo $GLOBALS['a'];  // 2
?>

After PHP Version 8.1

<?php
  $a 
1;
 
$globals $GLOBALS;
 
$globals['a'] = 2;
  echo 
$a// 1
 
echo $globals['a']; // 2
 
echo $GLOBALS['a'];  // 1
?>
2022-12-01 10:25:31
http://php5.kiev.ua/manual/ru/reserved.variables.globals.html

    Поддержать сайт на родительском проекте КГБ