Tratamento de Erros em PHP: try/catch e Técnicas Avançadas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que o Tratamento de Erros é a Base do Código PHP Confiável



Todo desenvolvedor PHP encontra erros. Seja uma entrada de usuário inválida, um banco de dados indisponível ou uma falha inesperada de API — sem um tratamento de erros adequado, uma aplicação se transforma em uma estrutura frágil que pode "quebrar" a qualquer momento. O tratamento de erros em PHP não é apenas uma forma de evitar a Tela Branca da Morte (WSOD), mas um princípio fundamental para criar aplicações web estáveis, seguras e sustentáveis.



Neste artigo, vamos detalhar todos os aspectos do tratamento de erros em PHP: desde o mecanismo básico try/catch até a criação de exceções personalizadas e estratégias avançadas de registro. Você aprenderá como transformar o caos dos erros em um processo gerenciável e previsível.



Fundamentos: try, catch, finally e throw



O Bloco try/catch — A Primeira Linha de Defesa



O mecanismo de exceção em PHP é baseado na construção try/catch. O código que pode causar um erro é colocado dentro do bloco try. Se uma exceção ocorrer dentro dele, a execução é imediatamente transferida para o bloco catch, onde o erro é tratado.



<?phptry {    $file = fopen('important_data.txt', 'r');    if (!$file) {        throw new Exception('Falha ao abrir arquivo');    }    // Trabalhar com o arquivo    fclose($file);} catch (Exception $e) {    echo 'Erro: ' . $e->getMessage();}?>


É importante entender: nem todos os erros em PHP são exceções. Avisos e notificações padrão não geram exceções automaticamente. Capturá-los requer configuração especial (veja a seção "Técnicas Avançadas").



O Bloco finally — Execução Garantida



O bloco finally sempre executa, independentemente de uma exceção ter sido lançada ou não. Este é o local ideal para liberar recursos: fechar arquivos, conexões de banco de dados ou liberar memória.



<?phpfunction processData($data) {    $connection = null;    try {        $connection = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');        // Executar consultas        return $connection->query($data);    } catch (PDOException $e) {        // Registrar o erro        error_log('Erro no BD: ' . $e->getMessage());        return false;    } finally {        // Fechar a conexão em qualquer caso        if ($connection) {            $connection = null;        }    }}?>


A Instrução throw — Criando Suas Próprias Exceções



Usando throw, você pode gerar exceções em qualquer ponto do seu código. Isso permite criar cenários de erro claros e previsíveis.



<?phpfunction validateAge($age) {    if (!is_numeric($age)) {        throw new InvalidArgumentException('A idade deve ser um número');    }    if ($age < 0 || $age > 150) {        throw new OutOfRangeException('A idade está fora do intervalo válido');    }    return true;}

try { validateAge('abc');} catch (InvalidArgumentException $e) { echo 'Erro de validação: ' . $e->getMessage();} catch (OutOfRangeException $e) { echo 'Intervalo inválido: ' . $e->getMessage();}?>


Classes de Exceção Personalizadas



As classes de exceção padrão (Exception, RuntimeException, InvalidArgumentException) cobrem muitos cenários, mas para projetos complexos, é melhor criar suas próprias hierarquias de exceção. Isso melhora a legibilidade do código e simplifica a depuração.



Criando uma Classe de Exceção Personalizada



<?phpclass DatabaseException extends Exception {    private $queryString;        public function __construct($message, $query = '', $code = 0, Throwable $previous = null) {        $this->queryString = $query;        parent::__construct($m                

Blogs

Book Recommendations