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.
Aufgabe
EinfachDu erhältst drei Eingaben: eine Zeichenkette für den Benutzernamen, eine Zeichenkette für das Passwort 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.
Erstelle eine benutzerdefinierte Ausnahme-Klasse namens InvalidCredentialsException, die die Basisklasse Exception erweitert.
Erstelle eine Funktion namens validateCredentials, die drei Parameter akzeptiert: Benutzername, Passwort und Mindestlänge. Innerhalb dieser Funktion:
- Wenn der Benutzername leer ist (eine leere Zeichenkette), löse eine
InvalidCredentialsExceptionmit der Nachricht"Username cannot be empty"aus. - Wenn die Passwortlänge kleiner als die Mindestlänge ist, löse eine
InvalidCredentialsExceptionmit der Nachricht"Password must be at least X characters long"aus (wobei X dem Wert der Mindestlänge entspricht). - Wenn beide Prüfungen erfolgreich sind, gib
"Credentials are valid"aus.
Verwende einen try...catch-Block, um die Funktion mit den bereitgestellten Eingaben aufzurufen. Fange im catch-Block gezielt die InvalidCredentialsException ab und gib "Validation error: " gefolgt von der Ausnahmemeldung mithilfe der Methode getMessage() aus.
Eingabeformat:
- Erste Zeile: Eine Zeichenkette, die den Benutzernamen darstellt (Beispiel:
john_doeoder eine leere Zeichenkette) - Zweite Zeile: Eine Zeichenkette, die das Passwort darstellt (Beispiel:
pass123) - Dritte Zeile: Eine Ganzzahl, die die Mindestlänge des Passworts darstellt (Beispiel:
8)
Erwartete Ausgabe:
- Wenn die Zugangsdaten 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 der Mindestlänge entspricht)
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
?>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Übe selbstständig: Online-PHP-Compiler