1. get_defined_vars()
Die aktuell definierten Variablen lassen sich über get_defined_vars() ermitteln. Die Funktion gibt ein Array zurück, welches den Namen der Variablen jeweils als Schlüssel und ihren Inhalt als Wert enthält (Variablenname => Variableninhalt). Am besten gibt man dieses Array einfach über var_dump() aus.
<?php $a = 999; var_dump(get_defined_vars()); ?>
array(6) { ["GLOBALS"]=> &array(6) { ["GLOBALS"]=> *RECURSION* ["_POST"]=> array(0) { } ["_GET"]=> array(0) { } ["_COOKIE"]=> array(0) { } ["_FILES"]=> array(0) { } ["a"]=> int(999) } ["_POST"]=> array(0) { } ["_GET"]=> array(0) { } ["_COOKIE"]=> array(0) { } ["_FILES"]=> array(0) { } ["a"]=> int(999) }
2. get_defined_vars() und globale Variablen/Superglobals
Wird get_defined_vars() auf oberster Ebene aufgerufen, enthält das zurückgegebene Array auch die Superglobals. Bei Aufruf von get_defined_vars() im Geltungsbereich einer Funktion sind diese nicht mehr Teil der Rückgabe, obwohl aus der Funktion heraus auf sie zugegriffen werden kann.
<?php function test() { $b = 1234; var_dump(get_defined_vars()); } $a = 999; test(); ?>
array(1) { ["b"]=> int(1234) }
Wie zu sehen ist, fehlen auch alle sonstigen globalen Variablen. Erst wenn diese im Geltungsbereich (Scope) der Funktion über das Schlüsselwort „global” explizit „importiert” werden, werden sie auch von get_defined_vars() zurückgegeben. Wie im nachfolgenden Beispiel zu sehen ist, wird aber nicht wirklich die globale Variable „importiert”. Stattdessen handelt es sich um eine Referenz auf diese, was in der Praxis aber keinen Unterschied macht.
<?php function test() { global $a; global $_POST; // Die Anwendung von global auf eine Superglobale erzeugt zwar keinen Fehler, // in der Rückgabe von get_defined_vars() ist sie aber trotzdem nicht enthalten. $b = 1234; // zum Vergleich $d mit Referenz auf $c $c = 42; $d =& $c; var_dump(get_defined_vars()); } $a = 999; test(); ?>
array(4) { ["a"]=> &int(999) ["b"]=> int(1234) ["c"]=> &int(42) ["d"]=> &int(42) }