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);
some_function();
function some_function(): void
{
var_dump($_GET);
var_dump($_POST);
}
superglobalVariables.php:7: array(0) { } superglobalVariables.php:8: 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);
$a = 'test';
$GLOBALS['a'] = 'test!';
var_dump($a);
writingGlobal.php:5: 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);
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 4
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.
Fragen zur Lernkontrolle
- Der Zugriff auf Daten eines HTTP-Requests ist dank superglobaler Variablen sehr komfortabel. Welche Nachteile hat das?
- "Nach dem Update auf PHP 8.1 ist kein Zugriff mehr auf globale Variablen möglich". Kommentiere diese Aussage.
- Formuliere sinnvolle Regeln für Deine Coding Guidelines, wie globale Variablen verwendet werden sollen bzw. dürfen.