Menu
Coddy logo textTech

Eine benutzerdefinierte Exception verwenden

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

Nachdem Sie nun Ihre eigene benutzerdefinierte Exception-Klasse erstellt haben, ist es an der Zeit, sie in der Praxis einzusetzen. Die Verwendung einer benutzerdefinierten Exception umfasst zwei wichtige Schritte: das Auslösen (Throwing) Ihres spezifischen Exception-Typs, wenn ein Problem auftritt, und das Abfangen (Catching) dieses spezifischen Exception-Typs, um ihn angemessen zu behandeln.

Wenn Sie eine benutzerdefinierte Exception auslösen, verwenden Sie dasselbe throw-Schlüsselwort, erstellen jedoch eine Instanz Ihrer eigenen Klasse anstelle der generischen Exception-Klasse. Dies macht Ihre Fehlerbehandlung präziser und aussagekräftiger.

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}
?>

Die wahre Stärke zeigt sich beim Abfangen Ihrer benutzerdefinierten Exception. Anstatt eine generische Exception abzufangen, können Sie Ihre spezifische InvalidEmailException abfangen. Dies ermöglicht es Ihnen, verschiedene Arten von Fehlern auf unterschiedliche Weise zu behandeln, wodurch Ihre Fehlerbehandlung gezielter und informativer wird.

<?php
try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Dieser Ansatz bietet Ihnen eine präzise Kontrolle über die Fehlerbehandlung und ermöglicht es Ihnen, unterschiedlich auf verschiedene Arten von Problemen in Ihrer Anwendung 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 drei Eingaben: einen Benutzernamen-String, einen Passwort-String und eine Zahl für die Mindestlänge des Passworts. Der Benutzername darf nicht leer sein, und das Passwort muss die Mindestlängenanforderung erfüllen.

Erstellen Sie eine benutzerdefinierte Exception-Klasse namens InvalidCredentialsException, die die Basisklasse Exception erweitert.

Erstellen Sie eine Funktion namens validateCredentials, die drei Parameter akzeptiert: username, password und minimum length. Innerhalb dieser Funktion:

  • Wenn der Benutzername leer ist (ein leerer String), werfen Sie eine InvalidCredentialsException mit der Nachricht "Username cannot be empty"
  • Wenn die Passwortlänge geringer als die Mindestlänge ist, werfen Sie eine InvalidCredentialsException mit der Nachricht "Password must be at least X characters long" (wobei X der Wert der Mindestlänge ist)
  • Wenn beide Validierungen erfolgreich sind, geben Sie "Credentials are valid" aus

Verwenden Sie einen try...catch-Block, um die Funktion mit den bereitgestellten Eingaben aufzurufen. Fangen Sie im catch-Block gezielt die InvalidCredentialsException ab und geben Sie "Validation error: " gefolgt von der Exception-Nachricht unter Verwendung der Methode getMessage() aus.

Eingabeformat:

  • Erste Zeile: Ein String, der den Benutzernamen repräsentiert (Beispiel: john_doe oder ein leerer String)
  • Zweite Zeile: Ein String, der das Passwort repräsentiert (Beispiel: pass123)
  • Dritte Zeile: Eine Ganzzahl, die die Mindestlänge des Passworts repräsentiert (Beispiel: 8)

Erwartete Ausgabe:

  • Wenn die Anmeldedaten gültig sind: Credentials are valid
  • Wenn der Benutzername leer ist: Validation error: Username cannot be empty
  • Wenn das Passwort zu kurz ist: Validation error: Password must be at least X characters long (wobei X die Mindestlänge ist)

Spickzettel

Um benutzerdefinierte Ausnahmen zu verwenden, werfen Sie eine Instanz Ihrer benutzerdefinierten Klasse und fangen Sie diesen spezifischen Ausnahmetyp ab:

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}

try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Dies ermöglicht eine präzise Fehlerbehandlung, indem spezifische Ausnahmetypen anstelle von generischen Exception-Objekten abgefangen werden.

Probier es selbst

<?php
// Eingabe lesen
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO: Schreiben Sie Ihren Code unten
// 1. Erstellen Sie die Klasse InvalidCredentialsException
// 2. Erstellen Sie die Funktion validateCredentials
// 3. Verwenden Sie einen try...catch-Block, um die Funktion aufzurufen und Ausnahmen zu behandeln

?>
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