Start · Sprachen · PHP · Referenz · eval

eval

Funktion

Führt den übergebenen String als PHP-Code aus und gibt den Rückgabewert des ausgeführten Codes zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

eval(string $code): mixed

Beschreibung

eval() wertet einen PHP-Code-String zur Laufzeit aus und führt ihn im Kontext des aktuellen Skripts aus. Die übergebene Zeichenkette wird wie normaler PHP-Code interpretiert, hat Zugriff auf alle aktuell definierten Variablen und kann Rückgabewerte über return liefern.

Ein typischer Anwendungsfall sind dynamisch generierte Code-Fragmente, z. B. das Auswerten von Ausdrücken, die erst zur Laufzeit bekannt sind. In der modernen PHP-Entwicklung ist eval() jedoch fast immer durch bessere Alternativen ersetzbar, etwa Callbacks, anonyme Funktionen oder Template-Engines.

Der übergebene Code muss gültiger PHP-Code sein, darf aber kein öffnendes <?php-Tag enthalten. Syntaxfehler im ausgewerteten Code führen seit PHP 7 zu einem ParseError, davor lediglich zu einer Warnung und einem Rückgabewert false.

Enthält der Code ein return-Statement, wird der entsprechende Wert als Rückgabewert von eval() geliefert. Andernfalls gibt eval() null zurück.

Parameter

Name Typ Default Beschreibung
$code Pflicht string Der auszuführende PHP-Code als Zeichenkette. Kein öffnendes <?php-Tag angeben. Statements müssen mit Semikolon abgeschlossen werden.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den Wert zurück, der mit return im ausgewerteten Code übergeben wurde, oder null wenn kein return verwendet wurde. Schlägt das Parsen des Codes fehl, wird in PHP < 7 false zurückgegeben; ab PHP 7 wird ein ParseError geworfen.

Beispiele

Einfache Berechnung mit eval

<?php
$ausdruck = '2 + 3 * 4';
$ergebnis = eval('return ' . $ausdruck . ';');
echo $ergebnis; // 14
14

Zugriff auf lokale Variablen im eval-Kontext

<?php
$name = 'Welt';
eval('echo "Hallo, " . $name . "!";');
Hallo, Welt!

ParseError abfangen (PHP 7+)

<?php
try {
    eval('ungültiger code ???');
} catch (ParseError $e) {
    echo 'Syntaxfehler im Code: ' . $e->getMessage();
}
Syntaxfehler im Code: syntax error, unexpected identifier "code" (or similar)

// Wichtig · Fallstricke

Sicherheitswarnung: eval() mit Benutzereingaben zu verwenden ist extrem gefährlich und kann zur vollständigen Kompromittierung des Servers führen (Remote Code Execution). Benutzereingaben dürfen niemals direkt oder indirekt in einen eval()-Aufruf einfließen.

Performance: eval() umgeht den PHP-Opcode-Cache (OPcache), da der Code zur Laufzeit kompiliert wird. Dies kann die Performance erheblich beeinträchtigen.

Debugging: Fehler innerhalb von eval() sind schwerer nachzuverfolgen, da Stack-Traces und Zeilennummern auf den eval-Block zeigen, nicht auf eine Datei.

Alternative: In fast allen Fällen können Closures, call_user_func(), dynamische Methodenaufrufe oder Template-Engines (Twig, Blade) als sicherere und wartbarere Alternative eingesetzt werden.