Signatur
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
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
Zugriff auf lokale Variablen im eval-Kontext
<?php
$name = 'Welt';
eval('echo "Hallo, " . $name . "!";');
ParseError abfangen (PHP 7+)
<?php
try {
eval('ungültiger code ???');
} catch (ParseError $e) {
echo 'Syntaxfehler im Code: ' . $e->getMessage();
}
// 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.