veröffentlicht am: 30.04.2020 zuletzt aktualisiert am: 07.02.2023
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.
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 }
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(); }
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(); }
Eine Ausnahme ist aufgetreten
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'; }
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!
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();
Exception! Finally!
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();
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.
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.
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Python, Java & SQL und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig