$GLOBALS

(PHP 4, PHP 5, PHP 7)

$GLOBALSReferences all variables available in global scope

설명

An associative array containing references to all variables which are currently defined in the global scope of the script. The variable names are the keys of the array.

예제

Example #1 $GLOBALS example

<?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

주의

Note:

이는 '자동전역' 변수입니다. 스크립트의 모든 영역에서 사용할 수 있습니다. 함수나 메쏘드 안에서 접근하기 위해서 global $variable;를 할 필요가 없습니다.

Note: Variable availability

Unlike all of the other superglobals, $GLOBALS has essentially always been available in PHP.

add a note add a note

User Contributed Notes 4 notes

up
25
therandshow at gmail dot com
13 years ago
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.
up
9
inafeeur at gmail dot com
2 years ago
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
?>
up
21
mstraczkowski at gmail dot com
11 years ago
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";
up
10
vittorio.zamparella at famous googlemail
8 years ago
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: http://www.php.net/manual/en/ini.core.php#ini.auto-globals-jit
-------------------------------------

http://www.php.net/manual/en/language.variables.variable.php
-------------------------------------
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.
-------------------------------------
To Top