Superglobale Variablen

Neben globalen Variablen kennt PHP auch noch die sogenannten superglobalen Variablen. Diese sind auch ohne explizite global-Deklaration in jedem Gültigkeitsbereich automatisch verfügbar:

<?php declare(strict_types=1);

namespace spriebsch\tfd\modernPhpDevelopment\superglobalVariables;

some_function();

function some_function(): void
{
    var_dump($_GET);
    var_dump($_POST);
}
superglobalVariables.php
superglobalVariables.php:9:
array(0) {
}
superglobalVariables.php:10:
array(0) {
}
Ausgabe von superglobalVariables.php
superglobalVariables.php ausführen

Es gibt noch mehr superglobale Variablen, die im PHP-Handbuch aufgelistet sind.

Historisch bedingt gibt es in PHP auch noch das superglobale assoziative Array $GLOBALS, über das wir alternativ auf globale Variablen zugreifen können:

<?php declare(strict_types=1);

namespace spriebsch\tfd\modernPhpDevelopment\superglobalVariables;

$a = 'test';
$GLOBALS['a'] = 'test!';
var_dump($a);
writingGlobal.php
writingGlobal.php:7:
string(5) "test!"
Ausgabe von writingGlobal.php
writingGlobal.php ausführen

Seit der Version PHP 8.1 ist ein schreibender Zugriff nur noch auf einzelne globale Variablen möglich. Jeder Versuch, schreibend auf das gesamte $GLOBALS zuzugreifen, führt seit PHP 8.1 direkt zu einem Übersetzungsfehler:

<?php declare(strict_types=1);

namespace spriebsch\tfd\modernPhpDevelopment\superglobalVariables;

var_dump($GLOBALS);
$GLOBALS = [];
var_dump($GLOBALS);
writingGlobals-will-fail.php
PHP Fatal error:  $GLOBALS can only be modified using the $GLOBALS[$name] = $value syntax in writingGlobals-will-fail.php on line 6
Ausgabe von writingGlobals-will-fail.php
writingGlobals-will-fail.php ausführen

Wir sehen, dass noch nicht einmal der erste var_dump() ausgeführt wurde. Die Programmausführung wurde gar nicht erst begonnen, weil uns der Compiler direkt abgesägt hat.

Verwende niemals $GLOBALS.