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.
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 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
InvalidCredentialsExceptionmit der Nachricht"Username cannot be empty" - Wenn die Passwortlänge geringer als die Mindestlänge ist, werfen Sie eine
InvalidCredentialsExceptionmit 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_doeoder 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
?>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