Du liest:
Ausnahmen und Fehler in PHP: try, catch und finally

Ausnahmen und Fehler in PHP: try, catch und finally

von Patrick
30.04.2020
Jetzt PHP programmieren lernen

Beim Ausführen unserer Skripte treten Fehler und Ausnahmen auf, das gehört zur Natur der Sache.
Jedoch ist es nötig, Fehler voneinander zu unterscheiden und entsprechend zu behandeln.
Dafür können wir in PHP die Schlüsselwörter try, catch und finally verwenden.

1. Ein einfacher PHP try catch Block

Fehler und Ausnahmen können wir behandeln, wenn der Code, der diese produziert, in einem try Block geschrieben wird.
Mit dem Schlüsselwort catch können wir diese dann abfangen.

try {
    # Tu was
} catch (Exception $e) {
    # Kümmere dich um Ausnahmen
}

1.1 Fehler und Ausnahmen

Ein Fehler tritt zum Beispiel auf, wenn du eine Funktion aufrufst, die nie definiert wurde.

<?php undefinierte_funktion(); ?>

Output:

Fatal error: Uncaught Error: Call to undefined function undefinierte_funktion() in C:\xampp\htdocs\codecitrus\try_catch.php:1 Stack trace: #0 {main} thrown in C:\xampp\htdocs\codecitrus\try_catch.php on line 1

Um Code zu definieren, der nur ausgeführt wird, wenn ein Fehler (Error) auftritt, kannst du try und catch anwenden.

try {
    undefinierte_funktion();
    echo 'Es ist kein Fehler aufgetreten';
} catch (Error $e) {
    echo 'Ein Fehler ist aufgetreten' . '<br>';
    echo $e->getMessage();
}

Output:

Ein Fehler ist aufgetreten
Call to undefined function undefinierte_funktion()

Wenn stattdessen eine Ausnahme (Exception) auftritt, musst du das im catch Block so angeben, um diese zu behandeln.

function ausnahme() {
    throw new Exception('Eine Ausnahme ist aufgetreten');
}
try {
    ausnahme();
} catch (Exception $e) {
    echo $e->getMessage();
}

Output:

Eine Ausnahme ist aufgetreten

1.2 Beide abfangen mit Throwable

Die vorigen Erklärungen haben sowohl Exceptions als auch Errors behandelt. Um beide abzufangen, könntest du zwei catch Blöcke hintereinander definieren.

try {
    undefinierte_funktion();
} catch (Exception $e) {
    echo 'Exception';
} catch (Error $e) {
    echo 'Error';
}

Output:

Error

Eine weitere Möglichkeit ist, Throwable mit catch abzufangen.
Throwable ist das Interface, das jede PHP-Klasse implementieren muss, soll sie mit throw aufgerufen werden.
Für das nächste Beispiel wird die Funktion ausnahme, die wir vorhin definiert haben, erneut genutzt.

try {
    undefinierte_funktion();
} catch (Throwable $t) {
    echo 'Gotta catch \'em all!';
}
// Gotta catch 'em all!
try {
    ausnahme();
} catch (Throwable $t) {
    echo 'Schnapp sie dir alle!';
}
// Schnapp sie dir alle!

2. finally um den Block zu beenden

Mit dem Schlüsselwort finally kannst du deinem Block weiteren Code hinzufügen.
finally ermöglicht es dir, Code zu schreiben, der ausgeführt wird egal ob ein Fehler auftritt oder nicht.

function finally_beispiel_1() {
    try {
        throw new Exception();
    } catch (Exception $e) {
        echo "Exception!" . '<br>';
    } finally {
        echo "Finally!";
    }
}
finally_beispiel_1();

Output:

Exception!
Finally!

2.1 Vorsicht mit return!

return kann bei Verwendung von finally zu unerwarteten Ergebnissen führen.

function finally_beispiel_2() {
    try {
        throw new Exception();
        return 1;
    } catch (Exception $e) {
        echo "Exception!" . '<br>';
        return 2;
    } finally {
        echo "Finally!" . '<br>';
        return 3;
    }
}
echo finally_beispiel_2();

Output:

Exception!
Finally!
3

Im vorigen Beispiel wurde der Wert von return aus dem catch Block einfach mit dem aus finally überschrieben.
Dasselbe würde passieren, wenn return bereits einen Wert aus try empfangen hätte.

3. Fazit – PHP try & catch

Mit try, catch und finally stellt uns PHP mächtige Werkzeuge zur Verfügung, um Ausnahmefälle und Fehler zu behandeln.
Damit können wir Logs erstellen, alternative Routinen ausführen oder einfach unser Skript stoppen.
Vorsicht ist jedoch geboten, wenn wir unseren Code in solchen Blöcken mit return verwenden, da dies zu unerwarteten Ergebnissen führen kann.

Wenn etwas unklar ist, dir etwas nicht oder sehr gut gefällt an diesem Beitrag, dann schreib es mir doch bitte in die Kommentare.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren