Menu
Coddy logo textTech

Usare un'eccezione personalizzata

Fa parte della sezione Logica e flusso del percorso PHP di Coddy. Lezione 57 di 68.

Ora che hai creato la tua classe di eccezione personalizzata, è il momento di metterla in pratica. L'utilizzo di un'eccezione personalizzata prevede due passaggi fondamentali: lanciare il tipo di eccezione specifico quando si verifica un problema e intercettare quel tipo di eccezione per gestirlo in modo appropriato.

Quando lanci un'eccezione personalizzata, usi la stessa parola chiave throw, ma crei un'istanza della tua classe personalizzata invece della classe generica Exception. Questo rende la gestione degli errori più precisa e significativa.

<?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!";
}
?>

Il vero potere emerge quando intercetti la tua eccezione personalizzata. Invece di intercettare un generico Exception, puoi intercettare la tua specifica InvalidEmailException. Questo ti permette di gestire diversi tipi di errori in modi diversi, rendendo la gestione degli errori più mirata e informativa.

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

Questo approccio ti offre un controllo preciso sulla gestione degli errori, consentendoti di rispondere in modo diverso ai vari tipi di problemi nella tua applicazione.

challenge icon

Sfida

Facile

Riceverai tre input: una stringa per il nome utente, una stringa per la password e un numero che indica la lunghezza minima della password. Il nome utente non deve essere vuoto e la password deve rispettare il requisito di lunghezza minima.

Crea una classe di eccezione personalizzata chiamata InvalidCredentialsException che estende la classe base Exception.

Crea una funzione chiamata validateCredentials che accetta tre parametri: nome utente, password e lunghezza minima. All'interno di questa funzione:

  • Se il nome utente è vuoto (una stringa vuota), genera un'eccezione InvalidCredentialsException con il messaggio "Username cannot be empty"
  • Se la lunghezza della password è inferiore alla lunghezza minima, genera un'eccezione InvalidCredentialsException con il messaggio "Password must be at least X characters long" (dove X è il valore della lunghezza minima)
  • Se entrambe le convalide hanno esito positivo, stampa "Credentials are valid"

Usa un blocco try...catch per chiamare la funzione con gli input forniti. Nel blocco catch, intercetta nello specifico InvalidCredentialsException e stampa "Validation error: " seguito dal messaggio dell'eccezione usando il metodo getMessage().

Formato dell'input:

  • Prima riga: una stringa che rappresenta il nome utente (esempio: john_doe o una stringa vuota)
  • Seconda riga: una stringa che rappresenta la password (esempio: pass123)
  • Terza riga: un numero intero che rappresenta la lunghezza minima della password (esempio: 8)

Output previsto:

  • Se le credenziali sono valide: Credentials are valid
  • Se il nome utente è vuoto: Validation error: Username cannot be empty
  • Se la password è troppo corta: Validation error: Password must be at least X characters long (dove X è la lunghezza minima)

Provalo tu

<?php
// Leggi l'input
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO: Scrivi il tuo codice qui sotto
// 1. Crea la classe InvalidCredentialsException
// 2. Crea la funzione validateCredentials
// 3. Usa un blocco try...catch per chiamare la funzione e gestire le eccezioni

?>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore PHP online