PHP 5.6.0beta1 released

$GLOBALS

(PHP 4, PHP 5)

$GLOBALSReferenziert alle Variablen, die im globalen Gültigkeitsbereich vorhanden sind

Beschreibung

Ein assoziatives Array, das Referenzen auf alle Variablen enthält, die derzeit im globalen Gültigkeitsbereich (Scope) des Skripts bekannt sind. Die Namen der jeweiligen Variablen sind die Schlüsselwerte, um auf den Inhalt der jeweils referenzierten Variablen zuzugreifen.

Beispiele

Beispiel #1 $GLOBALS-Beispiel

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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

Anmerkungen

Hinweis:

Dies ist eine 'Superglobale' oder automatisch globale Variable. Dies bedeutet, dass sie innerhalb des Skripts in jedem Geltungsbereich sichtbar ist. Es ist nicht nötig, sie mit global $variable bekannt zu machen, um aus Funktionen oder Methoden darauf zuzugreifen.

Hinweis: Verfügbarkeit der Variablen

Im Gegensatz zu allen anderen Superglobals ist $GLOBALS notwendigerweise immer in PHP verfügbar.

add a note add a note

User Contributed Notes 5 notes

up
9
mstraczkowski at gmail dot com
10 months 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
5
therandshow at gmail dot com
2 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
-4
bkilinc at deyta dot net
1 year ago
I prefer accessing globals through static function calls. Source code looks better; I use glb::get('myglobalvar') instead of $GLOBALS['myglobalvar']. This gives me full control over global access, which can be the source of problems in practice.

class glb
{
    static public function set($name, $value)
    {
        $GLOBALS[$name] = $value;
    }

    static public function get($name)
    {
        return $GLOBALS[$name];
    }

}

$myglobalvar = 'Hello, World !';

function myfunction()
{
    $val = glb::get('myglobalvar');
    echo "$val\n";
    glb::set('myglobalvar', 'hi, again :)');
    $val = glb::get('myglobalvar');
    echo "$val\n";
}

myfunction();
up
-5
ravenswd at yahoo dot com
5 years ago
Keep in mind that $GLOBALS is, itself, a global variable. So code like this won't work:

<?php
   
print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n";
?>

This results in the error message: "Nesting level too deep - recursive dependency?"
up
-18
Gratcy
1 year ago
this is technique that i always did for configuration file..

<?php
$conf
['conf']['foo'] = 'this is foo';
$conf['conf']['bar'] = 'this is bar';

function
foobar() {
    global
$conf;
   
var_dump($conf);
}

foobar();

/*
result is..

array
  'conf' =>
    array
      'foo' => string 'this is foo' (length=11)
      'bar' => string 'this is bar' (length=11)

*/
?>
To Top