Start · Sprachen · PHP · Referenz · ParseError

ParseError

Klasse

Wird geworfen, wenn beim Parsen von PHP-Code ein Syntaxfehler auftritt – z. B. beim Aufruf von <code>eval()</code>.

seit PHP 7.0.0 Kategorie: error

Signatur

class ParseError extends Error

Beschreibung

ParseError ist eine eingebaute PHP-Fehlerklasse, die von Error erbt und speziell dann ausgelöst wird, wenn PHP beim Analysieren von Code auf einen Syntaxfehler trifft. Der häufigste Anwendungsfall ist der Aufruf von eval() mit syntaktisch ungültigem PHP-Code. Seit PHP 7.0 gehört ParseError zur neuen Throwable-Hierarchie und kann daher wie jede andere Exception mit try/catch abgefangen werden.

Vor PHP 7 führte ein Parse-Fehler in eval() unweigerlich zum Abbruch des Skripts. Mit ParseError kann man solche Fehler jetzt kontrolliert behandeln, was besonders bei dynamisch generiertem oder benutzerdefiniertem PHP-Code (z. B. in Template-Engines oder Code-Editoren) nützlich ist.

ParseError erweitert Error, welcher das Throwable-Interface implementiert. Er lässt sich daher sowohl mit catch (ParseError $e) als auch mit catch (Error $e) oder catch (\Throwable $e) abfangen. Die Methoden getMessage(), getFile(), getLine() und getCode() liefern nützliche Diagnoseinformationen.

Es ist wichtig zu beachten, dass ParseError nur bei eval() zur Laufzeit abgefangen werden kann – ein Syntaxfehler in regulären PHP-Dateien führt bereits beim Laden/Kompilieren zum Abbruch, bevor überhaupt ein try-Block aktiv sein kann.

Beispiele

ParseError bei eval() abfangen

<?php
try {
    eval('function foo( { echo "fehlerhaft"; }');
} catch (ParseError $e) {
    echo 'Parse-Fehler abgefangen: ' . $e->getMessage() . PHP_EOL;
    echo 'In Datei: ' . $e->getFile() . ', Zeile: ' . $e->getLine() . PHP_EOL;
}
Parse-Fehler abgefangen: syntax error, unexpected token "{" In Datei: /pfad/zum/skript.php, Zeile: 2

ParseError über allgemeinen Throwable-Handler abfangen

<?php
function ausfuehren(string $code): mixed {
    try {
        return eval($code);
    } catch (\ParseError $e) {
        echo '[ParseError] ' . $e->getMessage() . PHP_EOL;
        return null;
    } catch (\Throwable $e) {
        echo '[Sonstiger Fehler] ' . $e->getMessage() . PHP_EOL;
        return null;
    }
}

$result = ausfuehren('return 1 + 2;');
echo 'Ergebnis: ' . $result . PHP_EOL;

ausfuehren('return 1 +;'); // Syntaxfehler
Ergebnis: 3 [ParseError] syntax error, unexpected token ";"

// Wichtig · Fallstricke

Sicherheitshinweis: Die Verwendung von eval() mit benutzerdefiniertem Code ist grundsätzlich ein hohes Sicherheitsrisiko. ParseError schützt nur vor Syntaxfehlern, nicht vor der Ausführung von schädlichem Code. Führe niemals ungefilterte Benutzereingaben mit eval() aus.

Einschränkung: ParseError kann nur bei eval()-Aufrufen zur Laufzeit abgefangen werden. Syntaxfehler in regulären PHP-Dateien werden bereits beim Kompilieren erkannt und können nicht mit try/catch behandelt werden.

ParseError ist nicht von Exception abgeleitet, sondern von Error. Ein catch (Exception $e)-Block fängt ParseError daher nicht ab.