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.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilVocê 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
InvalidCredentialsExceptioncom a mensagem"Username cannot be empty" - Se o comprimento da senha for menor que o comprimento mínimo, lance uma
InvalidCredentialsExceptioncom 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_doeou 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
?>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
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist5Boletim de Alunos
Configuração do Projeto: Estrutura de DadosAdicionando um Novo AlunoAdicionando uma Nota a um AlunoCalculando a Média do AlunoEncontrando o Melhor AlunoGerando um Boletim8Tratamento de Erros e Exceções
Entendendo Erros no PHPO Bloco 'try...catch'O Bloco 'finally'Lançando uma ExceçãoCriando uma Exceção PersonalizadaUsando uma Exceção PersonalizadaRecapitulação: Validação de Entrada3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de Leaderboard