Korzystanie z własnego wyjątku
Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 57 z 68.
Teraz, gdy masz już własną niestandardową klasę wyjątku, czas wykorzystać ją w praktyce. Korzystanie z niestandardowego wyjątku obejmuje dwa kluczowe kroki: zgłoszenie konkretnego typu wyjątku w przypadku wystąpienia problemu oraz przechwycenie tego konkretnego typu wyjątku, aby odpowiednio go obsłużyć.
Gdy zgłaszasz niestandardowy wyjątek, używasz tego samego słowa kluczowego throw, ale tworzysz instancję własnej klasy zamiast ogólnej klasy Exception. Dzięki temu obsługa błędów jest bardziej precyzyjna i ma większe znaczenie.
<?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!";
}
?>Prawdziwa moc ujawnia się podczas przechwytywania własnego wyjątku. Zamiast przechwytywać ogólny wyjątek Exception, możesz przechwycić konkretny wyjątek InvalidEmailException. Dzięki temu możesz obsługiwać różne rodzaje błędów na różne sposoby, co sprawia, że obsługa błędów jest bardziej ukierunkowana i dostarcza więcej informacji.
<?php
try {
validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
echo "Email error: " . $e->getMessage();
}
?>To podejście daje Ci precyzyjną kontrolę nad obsługą błędów, pozwalając reagować w różny sposób na różne rodzaje problemów w Twojej aplikacji.
Wyzwanie
ŁatwyOtrzymasz trzy dane wejściowe: ciąg znaków z nazwą użytkownika, ciąg znaków z hasłem oraz liczbę określającą minimalną długość hasła. Nazwa użytkownika nie powinna być pusta, a hasło powinno spełniać wymóg minimalnej długości.
Utwórz własną klasę wyjątku o nazwie InvalidCredentialsException, która rozszerza bazową klasę Exception.
Utwórz funkcję o nazwie validateCredentials, która przyjmuje trzy parametry: nazwę użytkownika, hasło i minimalną długość. Wewnątrz tej funkcji:
- Jeśli nazwa użytkownika jest pusta (jest pustym ciągiem), rzuć wyjątek
InvalidCredentialsExceptionz komunikatem"Username cannot be empty" - Jeśli długość hasła jest mniejsza niż minimalna długość, rzuć wyjątek
InvalidCredentialsExceptionz komunikatem"Password must be at least X characters long"(gdzie X to wartość minimalnej długości) - Jeśli obie walidacje zakończą się powodzeniem, wypisz
"Credentials are valid"
Użyj bloku try...catch, aby wywołać funkcję z podanymi danymi wejściowymi. W bloku catch przechwyć konkretnie wyjątek InvalidCredentialsException i wypisz "Validation error: ", a następnie komunikat wyjątku, używając metody getMessage().
Format danych wejściowych:
- Pierwszy wiersz: ciąg znaków reprezentujący nazwę użytkownika (na przykład:
john_doelub pusty ciąg) - Drugi wiersz: ciąg znaków reprezentujący hasło (na przykład:
pass123) - Trzeci wiersz: liczba całkowita określająca minimalną długość hasła (na przykład:
8)
Oczekiwany wynik:
- Jeśli dane logowania są prawidłowe:
Credentials are valid - Jeśli nazwa użytkownika jest pusta:
Validation error: Username cannot be empty - Jeśli hasło jest zbyt krótkie:
Validation error: Password must be at least X characters long(gdzie X to minimalna długość)
Spróbuj swoich sił
<?php
// Odczytaj dane wejściowe
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));
// TODO: Napisz swój kod poniżej
// 1. Utwórz klasę InvalidCredentialsException
// 2. Utwórz funkcję validateCredentials
// 3. Użyj bloku try...catch, aby wywołać funkcję i obsłużyć wyjątki
?>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane funkcje
Funkcje anonimoweDomknięcia i „use”Funkcje strzałkoweFunkcje zwrotneUżywanie „call_user_func”Funkcje zmiennePrzekazywanie przez referencjęFunkcje rekurencyjnePowtórka: przegląd funkcji4Tablice wielowymiarowe
Tworzenie tablicy 2DDostęp do elementów tablicy 2DModyfikowanie elementów tablicy 2DIterowanie z użyciem zagnieżdżonych pętliAsocjacyjne tablice 2DPodsumowanie: ćwiczenie z prostą siatką2Zaawansowane operacje na tablicach
Dodawanie za pomocą 'array_push'Usuwanie za pomocą 'array_pop'Dodawanie za pomocą 'array_unshift'Usuwanie za pomocą 'array_shift'Łączenie tablic indeksowanychŁączenie tablic asocjacyjnychWyodrębnianie za pomocą 'array_slice'Wyszukiwanie wartości za pomocą 'in_array'Wyszukiwanie kluczy za pomocą 'array_search'Podsumowanie: ćwiczenie z playlistą5Dziennik ocen uczniów
Konfiguracja projektu: struktura danychDodawanie nowego uczniaDodawanie oceny uczniowiObliczanie średniej uczniaWyszukiwanie ucznia z najwyższą ocenąGenerowanie świadectwa8Obsługa błędów i wyjątków
Poznawanie błędów PHPBlok „try...catch”Blok „finally”Zgłaszanie wyjątkuTworzenie własnego wyjątkuKorzystanie z własnego wyjątkuPodsumowanie: walidacja danych wejściowych3Sortowanie tablic
Sortowanie tablic indeksowanych rosnącoSortowanie tablic indeksowanych malejącoSortowanie tablic asocjacyjnych według wartościSortowanie tablic asocjacyjnych według kluczaSortowanie w kolejności naturalnejSortowanie niestandardowe za pomocą 'usort'Podsumowanie: sortowanie tabeli wynikówPoćwicz samodzielnie: Kompilator PHP online