Menu
Coddy logo textTech

Usando uma Exceção Personalizada

Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 57 de 68.

Agora que você criou sua própria classe de exceção personalizada, é hora de colocá-la em uso prático. O uso de uma exceção personalizada envolve duas etapas principais: lançar o seu tipo de exceção específico quando ocorre um problema e capturar esse tipo de exceção específico para tratá-lo adequadamente.

Quando você lança uma exceção personalizada, você usa a mesma palavra-chave throw, mas cria uma instância da sua classe personalizada em vez da classe genérica Exception. Isso torna o seu tratamento de erros mais preciso e significativo.

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

O verdadeiro poder surge ao capturar sua exceção personalizada. Em vez de capturar uma Exception genérica, você pode capturar sua InvalidEmailException específica. Isso permite que você lide com diferentes tipos de erros de maneiras distintas, tornando o seu tratamento de erros mais direcionado e informativo.

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

Esta abordagem oferece controle preciso sobre o tratamento de erros, permitindo que você responda de forma diferente a vários tipos de problemas em sua aplicação.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Você receberá três entradas: uma string de nome de usuário (username), uma string de senha (password) e um número para o comprimento mínimo da senha. O nome de usuário não deve estar vazio, e a senha deve atender ao requisito de comprimento mínimo.

Crie uma classe de exceção personalizada chamada InvalidCredentialsException que estenda a classe base Exception.

Crie uma função chamada validateCredentials que aceite três parâmetros: username, password e comprimento mínimo. Dentro desta função:

  • Se o nome de usuário estiver vazio (uma string vazia), lance uma InvalidCredentialsException com a mensagem "Username cannot be empty"
  • Se o comprimento da senha for menor que o comprimento mínimo, lance uma InvalidCredentialsException com a mensagem "Password must be at least X characters long" (onde X é o valor do comprimento mínimo)
  • Se ambas as validações passarem, imprima "Credentials are valid"

Use um bloco try...catch para chamar a função com as entradas fornecidas. No bloco catch, capture especificamente a InvalidCredentialsException e imprima "Validation error: " seguido pela mensagem da exceção usando o método getMessage().

Formato de entrada:

  • Primeira linha: Uma string representando o nome de usuário (exemplo: john_doe ou uma string vazia)
  • Segunda linha: Uma string representando a senha (exemplo: pass123)
  • Terceira linha: Um número inteiro representando o comprimento mínimo da senha (exemplo: 8)

Saída esperada:

  • Se as credenciais forem válidas: Credentials are valid
  • Se o nome de usuário estiver vazio: Validation error: Username cannot be empty
  • Se a senha for muito curta: Validation error: Password must be at least X characters long (onde X é o comprimento mínimo)

Folha de consulta

Para usar exceções personalizadas, lance uma instância da sua classe personalizada e capture esse tipo específico de exceção:

<?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();
}
?>

Isso permite um tratamento de erros preciso ao capturar tipos de exceção específicos em vez de objetos Exception genéricos.

Experimente você mesmo

<?php
// Ler a entrada
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO: Escreva seu código abaixo
// 1. Crie a classe InvalidCredentialsException
// 2. Crie a função validateCredentials
// 3. Use o bloco try...catch para chamar a função e tratar exceções

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo