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:9: array(0) { } superglobalVariables.php:10: array(0) { }
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:7: string(5) "test!"
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);
PHP Fatal error: $GLOBALS can only be modified using the $GLOBALS[$name] = $value syntax in writingGlobals-will-fail.php on line 6
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.