Menu
Coddy logo textTech

Eine Exception auslösen

Teil des Abschnitts Logik & Ablauf der PHP-Journey von Coddy — Lektion 55 von 68.

Manchmal müssen Sie signalisieren, dass in Ihrem Code etwas schiefgelaufen ist, und die normale Ausführung stoppen. Das Schlüsselwort throw ermöglicht es Ihnen, manuell eine Ausnahme zu erstellen und auszulösen, wodurch Sie die Kontrolle darüber erhalten, wann und warum Ihr Programm eine Fehlerbedingung behandeln sollte.

Wenn Sie eine Exception auslösen, erstellen Sie ein neues Exception-Objekt und versehen es mit einer beschreibenden Nachricht darüber, was schiefgelaufen ist. Diese Exception wird die aktuelle Code-Ausführung sofort stoppen und nach einem catch-Block suchen, um sie zu behandeln.

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

Die throw-Anweisung erfordert die new Exception()-Syntax, bei der Sie eine String-Nachricht übergeben, die das Problem beschreibt. Diese Nachricht kann später mit der getMessage()-Methode in Ihrem catch-Block abgerufen werden, was es einfacher macht, zu verstehen, was schiefgelaufen ist, und angemessen zu reagieren.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

Sie erhalten zwei Eingaben: eine Zahl, die einen Preis darstellt, und eine Zahl, die einen Rabattprozentsatz darstellt. Beide Eingaben werden als Zahlen bereitgestellt (der Preis kann eine Dezimalzahl sein und der Rabattprozentsatz ist eine Ganzzahl zwischen 0 und 100).

Lesen Sie beide Eingaben ein und erstellen Sie eine Funktion namens calculateFinalPrice, die zwei Parameter akzeptiert: den Preis und den Rabattprozentsatz. Überprüfen Sie innerhalb dieser Funktion, ob der Rabattprozentsatz größer als 100 oder kleiner als 0 ist. Wenn eine der Bedingungen zutrifft, werfen Sie eine neue Exception mit der Nachricht "Invalid discount percentage". Wenn der Rabatt gültig ist, berechnen Sie den Endpreis nach Anwendung des Rabatts und geben Sie diesen zurück.

Verwenden Sie einen try...catch-Block, um die Funktion mit den bereitgestellten Eingaben aufzurufen. Rufen Sie im try-Block die Funktion auf und geben Sie "Final price: " gefolgt vom berechneten Endpreis aus. Behandeln Sie im catch-Block die Ausnahme, indem Sie "Error: " gefolgt von der Ausnahmenachricht unter Verwendung der Methode getMessage() ausgeben.

Eingabeformat:

  • Erste Zeile: Eine Zahl, die den Preis darstellt (Beispiel: 100 oder 49.99)
  • Zweite Zeile: Eine Ganzzahl, die den Rabattprozentsatz darstellt (Beispiel: 20 oder 150)

Erwartete Ausgabe:

  • Wenn der Rabatt gültig ist: Final price: gefolgt vom berechneten Preis nach dem Rabatt
  • Wenn der Rabatt ungültig ist: Error: Invalid discount percentage

Spickzettel

Verwenden Sie das throw-Schlüsselwort, um manuell Ausnahmen zu erstellen und auszulösen:

throw new Exception("Error message");

Wenn eine Ausnahme ausgelöst wird, stoppt sie die normale Ausführung und sucht nach einem catch-Block, um sie zu behandeln:

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

Verwenden Sie die getMessage()-Methode im catch-Block, um die Ausnahmemeldung abzurufen.

Probier es selbst

<?php
// Eingaben lesen
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO: Schreiben Sie Ihren Code unten
// Erstellen Sie die Funktion calculateFinalPrice
// Verwenden Sie einen try...catch-Block, um die Funktion aufzurufen und Ausnahmen zu behandeln
// Geben Sie die entsprechende Ausgabe aus

?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf