Signatur
Beschreibung
get_defined_vars() liefert ein assoziatives Array, dessen Schlüssel die Variablennamen und dessen Werte die jeweiligen Variablenwerte im aktuellen Gültigkeitsbereich (Scope) sind. Die Funktion berücksichtigt dabei alle zu diesem Zeitpunkt definierten Variablen – lokale Variablen innerhalb einer Funktion bzw. globale Variablen im globalen Scope.
Typische Einsatzgebiete sind Debugging und Logging, bei denen man schnell einen Überblick über alle aktuell verfügbaren Variablen und deren Zustände benötigt. Auch beim Übergeben von Template-Variablen oder beim Aufbau von Fehlerberichten kann die Funktion nützlich sein.
Wichtig: Im globalen Scope enthält das Ergebnis auch Superglobale wie $_GET, $_POST usw. In einer Funktion hingegen sind nur die dort definierten lokalen Variablen enthalten – globale Variablen erscheinen nicht, sofern sie nicht explizit mit global importiert wurden.
Das zurückgegebene Array ist eine Momentaufnahme zum Zeitpunkt des Aufrufs. Spätere Änderungen an den Originalvariablen spiegeln sich nicht im Array wider, da PHP Werte standardmäßig kopiert (Copy-on-Write). Referenzen werden jedoch als Referenzen im Array gespeichert.
Rückgabewert
Beispiele
Alle Variablen im lokalen Funktions-Scope ausgeben
<?php
function berechneSumme(int $a, int $b): int
{
$summe = $a + $b;
$debug = get_defined_vars();
echo '<pre>' . print_r($debug, true) . '</pre>';
return $summe;
}
berechneSumme(3, 7);
Template-Variablen gesammelt an eine View übergeben
<?php
function renderTemplate(string $template): void
{
$title = 'Willkommen';
$author = 'Max Mustermann';
$year = 2024;
// Alle lokalen Variablen als Kontext an das Template übergeben
$context = get_defined_vars();
unset($context['template']); // Template-Pfad selbst nicht übergeben
extract($context); // Variablen im Template-Scope verfügbar machen
include $template;
}
// renderTemplate('views/home.php');
Debugging im globalen Scope
<?php
$name = 'Alice';
$alter = 30;
$aktiv = true;
$vars = get_defined_vars();
foreach ($vars as $varName => $wert) {
if (in_array($varName, ['_GET', '_POST', '_COOKIE', '_FILES', '_SERVER', '_ENV', '_REQUEST', 'GLOBALS'], true)) {
continue; // Superglobale überspringen
}
echo "\${$varName} = " . var_export($wert, true) . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Im globalen Scope enthält das zurückgegebene Array auch $_SERVER, $_ENV und andere Superglobale, die sensible Informationen wie Pfade, Zugangsdaten aus Umgebungsvariablen oder HTTP-Header enthalten können. Gib das Ergebnis von get_defined_vars() niemals ungeprüft an den Browser aus.
Performance: Der Aufruf kopiert alle Werte im aktuellen Scope. In Funktionen mit vielen oder großen Variablen kann das einen merklichen Speicheroverhead verursachen. Für produktiven Code sollte die Funktion daher nur gezielt eingesetzt werden.
Kein Zugriff auf Superglobale in Funktionen: Innerhalb einer Funktion sind Superglobale wie $_GET nicht automatisch im Ergebnis enthalten – sie müssten explizit mit global $_GET; importiert werden, was jedoch üblicherweise schlechter Stil ist.