Start · Sprachen · PHP · Referenz · get_defined_vars

get_defined_vars

Funktion

Gibt ein assoziatives Array aller im aktuellen Gültigkeitsbereich definierten Variablen und deren Werte zurück.

seit PHP 4.0.4 Kategorie: type

Signatur

get_defined_vars(): array

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

Typ
array
Beschreibung
Ein assoziatives Array mit allen im aktuellen Scope definierten Variablennamen als Schlüssel und den zugehörigen Werten. Das Array enthält nur Variablen, die zum Zeitpunkt des Aufrufs sichtbar sind.

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);
Array ( [a] => 3 [b] => 7 [summe] => 10 )

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;
}
$name = 'Alice' $alter = 30 $aktiv = true

// 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.