Alle aktuell definierten Variablen ausgeben

Wie in PHP alle Variablen ausgegeben werden können, ohne dass diese namentlich bekannt sein müssen

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-Code
<?php
    $a = 999;
	var_dump(get_defined_vars());
?>

HTML-Code: Ausgabe
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-Code
<?php
	function test() {
		$b = 1234;
		
		var_dump(get_defined_vars());
	}

	$a = 999;
	test();
?>

HTML-Code: Ausgabe
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-Code
<?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();
?>

HTML-Code: Ausgabe
array(4) {
  ["a"]=>
  &int(999)
  ["b"]=>
  int(1234)
  ["c"]=>
  &int(42)
  ["d"]=>
  &int(42)
}



Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0