$GLOBALS

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

$GLOBALSReferences all variables available in global scope

Descrierea

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.

Exemple

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();
?>

Exemplul de mai sus va afișa ceva similar cu:

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

Note

Notă:

Aceasta este o variabilă 'superglobală', sau globală automată. Aceasta pur și simplu înseamnă că ea este disponibilă în toate circumstanțele pe parcursul script-ului. Nu este nevoie de a scrie global $variable; pentru a o accesa din funcții sau metode.

Notă: 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
1 year 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