Der 'finally'-Block
Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy — Lektion 54 von 68.
Manchmal benötigen Sie Code, der unabhängig davon ausgeführt wird, ob eine Ausnahme auftritt oder nicht. Der finally-Block bietet diese Garantie – er enthält Code, der immer nach Abschluss eines try...catch-Blocks ausgeführt wird, was ihn ideal für Bereinigungsoperationen wie das Schließen von Dateien oder Datenbankverbindungen macht.
Der finally-Block wird in allen Szenarien ausgeführt: wenn der try-Block ohne Ausnahmen erfolgreich abgeschlossen wird, wenn eine Ausnahme ausgelöst und abgefangen wird und sogar dann, wenn eine Ausnahme ausgelöst, aber nicht abgefangen wird. Diese Zuverlässigkeit macht ihn unentbehrlich, um sicherzustellen, dass wichtiger Bereinigungscode immer ausgeführt wird.
<?php
try {
echo "Attempting operation...\n";
// Code, der eine Ausnahme auslösen könnte
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>Der finally-Block wird ausgeführt, nachdem sowohl der try- als auch der catch-Block abgeschlossen sind, und bietet einen einheitlichen Ort für wichtigen Bereinigungscode. Dies stellt sicher, dass Ihr Skript Ressourcen ordnungsgemäß verarbeitet und einen sauberen Zustand beibehält, unabhängig davon, was während der Ausführung passiert.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachSie erhalten zwei Eingaben: einen Operationstyp und eine Zahl. Die erste Eingabe ist ein String, der entweder "divide" oder "multiply" sein wird. Die zweite Eingabe ist eine Zahl, die in der Operation verwendet wird.
Lesen Sie beide Eingaben ein und erstellen Sie einen try...catch...finally-Block. Überprüfen Sie innerhalb des try-Blocks den Operationstyp:
- Wenn die Operation
"divide"ist, prüfen Sie, ob die Zahl Null ist. Wenn sie Null ist, werfen Sie eine neueExceptionmit der Nachricht"Cannot divide by zero". Wenn die Zahl nicht Null ist, berechnen Sie 100 geteilt durch die Zahl und geben Sie"Result: "gefolgt vom Ergebnis aus. - Wenn die Operation
"multiply"ist, berechnen Sie 100 multipliziert mit der Zahl und geben Sie"Result: "gefolgt vom Ergebnis aus.
Behandeln Sie im catch-Block jede Exception, indem Sie "Error: " gefolgt von der Exception-Nachricht unter Verwendung der getMessage()-Methode ausgeben.
Geben Sie im finally-Block "Operation completed" aus.
Eingabeformat:
- Erste Zeile: Ein String für den Operationstyp (entweder
divideodermultiply) - Zweite Zeile: Eine Zahl (Beispiel:
5oder0oder2.5)
Erwartete Ausgabe:
- Wenn die Operation erfolgreich ist:
Result:gefolgt vom berechneten Wert, dannOperation completedin einer neuen Zeile - Wenn eine Division durch Null auftritt:
Error: Cannot divide by zero, dannOperation completedin einer neuen Zeile
Spickzettel
Der finally-Block enthält Code, der immer nach Abschluss eines try...catch-Blocks ausgeführt wird, unabhängig davon, ob eine Ausnahme aufgetreten ist. Er eignet sich hervorragend für Bereinigungsoperationen wie das Schließen von Dateien oder Datenbankverbindungen.
Der finally-Block wird in allen Szenarien ausgeführt:
- Wenn der
try-Block ohne Ausnahmen erfolgreich abgeschlossen wird - Wenn eine Ausnahme ausgelöst und abgefangen wird
- Wenn eine Ausnahme ausgelöst, aber nicht abgefangen wird
<?php
try {
echo "Attempting operation...\n";
// Code that might throw an exception
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
} finally {
echo "Cleanup completed.\n";
}
?>Der finally-Block wird ausgeführt, nachdem sowohl der try- als auch der catch-Block beendet wurden, wodurch sichergestellt wird, dass essenzieller Bereinigungscode immer ausgeführt wird.
Probier es selbst
<?php
// Eingaben lesen
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));
// TODO: Schreibe deinen Code unten
// Erstelle einen try...catch...finally-Block, um die Operation zu verarbeiten
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Funktionen
Anonyme FunktionenClosures und 'use'Arrow FunctionsCallback-FunktionenVerwendung von 'call_user_func'VariablenfunktionenReferenzübergabeRekursive FunktionenRückblick: Funktions-Medley4Mehrdimensionale Arrays
Ein 2D-Array erstellenZugriff auf 2D-Array-ElementeÄndern von 2D-Array-ElementenIterieren mit verschachtelten Schleifen2D assoziative ArraysZusammenfassung: Einfache Gitter-Übung2Fortgeschrittene Array-Manipulationen
Hinzufügen mit 'array_push'Entfernen mit 'array_pop'Hinzufügen mit 'array_unshift'Entfernen mit 'array_shift'Indizierte Arrays zusammenführenAssoziative Arrays zusammenführenExtrahieren mit 'array_slice'Werte mit 'in_array'Schlüssel mit 'array_search'Rückblick: Playlist-Übung5Schüler-Notenbuch
Projekt-Setup: DatenstrukturEinen neuen Schüler hinzufügenEinem Schüler eine Note hinzufügenDurchschnittsnote eines Schülers berechnenDen besten Schüler findenEin Zeugnis erstellen8Fehler- und Ausnahmebehandlung
PHP-Fehler verstehenDer 'try...catch'-BlockDer 'finally'-BlockEine Exception auslösenEine benutzerdefinierte Exception erstellenEine benutzerdefinierte Exception verwendenZusammenfassung: Eingabevalidierung3Arrays sortieren
Indizierte Arrays aufsteigend sortierenIndizierte Arrays absteigend sortierenAssoziative Arrays nach Wert sortierenAssoziative Arrays nach Schlüssel sortierenNatürliche SortierungBenutzerdefiniertes Sortieren mit 'usort'Recap: Leaderboard-Sortierung