Errors e Exceptions PHP

Capa Curso PHP
Tempo de leitura: 4 minutos

Errors e Exceptions PHP: O gerenciamento de erros e exceções é crucial para a robustez e segurança de qualquer aplicação PHP. Um mecanismo de tratamento de erros bem implementado evita falhas inesperadas (os temidos crashes) e garante uma melhor experiência ao usuário.

Embora erros e exceções lidem com desvios no fluxo normal do programa, eles são tratados de maneiras distintas no PHP.

1. 🚨 Tipos de Erros Tradicionais em PHP

Os erros tradicionais do PHP são eventos baseados em nível de erro que o motor detecta.

Tipo de ErroNívelDescriçãoImpacto na Execução
Fatal ErrorsE_ERRORErros críticos (ex: chamar uma classe inexistente, require falho).Interrompe a execução do script imediatamente.
WarningsE_WARNINGAvisos não fatais (ex: chamar uma função com número incorreto de argumentos).O script continua a execução, mas pode gerar resultados inesperados.
NoticesE_NOTICEErros de runtime não críticos (ex: usar uma variável que não foi definida).O script continua a execução, servem para debugging.
Parse ErrorsE_PARSEErros de sintaxe que impedem o script de ser lido (ex: ponto-e-vírgula faltando).Interrompe a execução antes de iniciar.

Configurações de Relatório de Erros

Duas diretivas são cruciais para controlar a exibição e o registro de erros:

DiretivaDescriçãoUso Típico
error_reportingDefine quais tipos de erros serão reportados.Desenvolvimento: error_reporting(E_ALL);
display_errorsDefine se os erros serão exibidos na tela para o usuário.Desenvolvimento: ini_set('display_errors', 1); Produção: ini_set('display_errors', 0);

PHP

<?php
// Configuração ideal para AMBIENTE DE DESENVOLVIMENTO
error_reporting(E_ALL); // Reporta todos os erros, avisos e notices
ini_set('display_errors', 1); // Exibe os erros na tela
?>

2. 🛡️ Exceções: Tratamento Elegante (try-catch)

As Exceções são objetos que representam uma falha ou condição excepcional. Elas permitem que o código de erro seja lançado (throw) e capturado (catch) de forma estruturada, isolando o tratamento de falhas da lógica de negócio.

Estrutura try-catch

BlocoPropósito
tryEnvolve o código onde o erro é esperado. Se uma exceção for lançada, o script imediatamente salta para o bloco catch.
catchCaptura a exceção lançada (Exception ou uma classe que a herda) e executa o código de tratamento (ex: logar o erro, exibir mensagem amigável).

Exemplo de Uso de Exceção

PHP

<?php
function dividir($numerador, $denominador) {
    if ($denominador == 0) {
        // Lança uma exceção do tipo Exception
        throw new Exception("Divisão por zero não permitida!");
    }
    return $numerador / $denominador;
}

try {
    $resultado = dividir(10, 0); // Isso lançará a exceção
} catch (Exception $e) {
    // A exceção é capturada aqui.
    echo "Erro capturado: " . $e->getMessage(); // Saída: Erro capturado: Divisão por zero não permitida!
}
?>

Bloco finally

O bloco finally é opcional e seu código é executado sempre, independentemente de uma exceção ter sido lançada ou capturada. É ideal para tarefas de limpeza (ex: fechar conexão com banco de dados ou arquivos).

PHP

try {
    // ...
} catch (Exception $e) {
    // ...
} finally {
    echo "Fim da operação, recursos liberados.";
}

Hierarquia de Exceções Personalizadas

Criar suas próprias classes de exceção (class MinhaExcecao extends Exception {}) permite que você capture e trate diferentes tipos de problemas de maneira mais específica. O PHP 7 introduziu a interface base Throwable, que é a raiz de todos os Error (erros fatais) e Exception (erros de programação).

3. ✅ Boas Práticas para Tratamento de Erros

  1. Isolar o Risco: Use try-catch para envolver apenas o código que você sabe que pode falhar (ex: operações de I/O, conexões com banco de dados).
  2. Logar, Não Exibir em Produção: Em ambientes de produção, desative display_errors. Em vez disso, use error_log ou uma biblioteca dedicada para logar os detalhes técnicos do erro (stack trace) em um arquivo, para que a equipe de desenvolvimento possa analisá-los posteriormente.
  3. Classes Customizadas: Use exceções personalizadas para categorizar falhas e ter blocos catch mais direcionados (ex: catch (DatabaseException $e)).
  4. Capturar Erros Fatais (PHP 7+): O PHP 7+ permite capturar a maioria dos erros fatais (E_ERROR) usando try...catch via a interface Throwable.

✅ Conclusão Errors e Exceptions PHP

Errors e Exceptions PHP: O tratamento de erros e exceções é vital para a criação de sistemas confiáveis. Enquanto a correta configuração de error_reporting e display_errors gerencia os erros tradicionais do PHP, o uso de try-catch-finally com a classe Exception (e suas classes personalizadas) é o padrão moderno e elegante para isolar, capturar e tratar falhas de forma organizada, garantindo a resiliência e a segurança de sua aplicação.

Toda jornada tem um início, e o início para se tornar um desenvolvedor back-end é dominar as seguintes tecnologias, que você encontra aqui mesmo:

SQL
SQL
Capa Curso PHP
PHP
Laravel
Laravel

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de experiência em tecnologia, atuo como Engenheiro de Computação, desenvolvedor de sistemas, escritor e produtor de conteúdo. Minha trajetória passa pelo ensino técnico, desenvolvimento web, arquitetura de sistemas e criação de soluções voltadas para a indústria de jogos digitais. Acredito que conhecimento deve ser acessível e aplicável. Essa visão resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, inteligência artificial, Game Design, mercado de jogos e carreiras na indústria de games. Sou autor do livro "GDD – O Guia Definitivo", uma obra dedicada ao planejamento e documentação de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na análise e validação de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos viáveis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na criação de metodologias para validação de produtos digitais e na produção de conteúdo técnico voltado ao ecossistema de jogos. Meu compromisso é unir teoria, prática e experiência de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da área.