PHP
Aprenda a dominar os Erros Fatais no PHP 7

Erros Fatais agora são Exceções no PHP 7. Agora você tem o domínio total sobre eles! Que show hein? Aprenda a tratar os erros e confira aqui um exemplo.

Antes do PHP 7, os erros Fatais dominavam a vida dos programadores e trancavam tudo quando apareciam. Todos os métodos e demais operações que seriam executadas após o erro eram esquecidos no além. Agora a situação é diferente. Você poderá salva-los utilizando o super Try Catch. Conhece?
O que é Try /Catch
Para você que não conhece vou apresentar esse camarada. O Try Catch é utilizado em muitas linguagens de programação para evitar quebras bruscas ocasionadas por algum erro ou problema durante um processamento. Em outras palavras, usamos em situações de riscos e ele protege o sistema possibilitando um tratamento adequado quando uma exceção ocorrer.
Antes da era do PHP 7
A vida era diferente antes do PHP 7, pois um erro fatal, simplesmente interrompia totalmente a execução de nossos scripts.
Com o PHP 7
Com a chegada do PHP 7, os seus problemas acabaram! O Try Catch consegue tratar esse erro Fatal, e com isso possibilita um maior controle para o programador na hora de estruturar seus códigos. Mas nem tudo são flores, ainda existem alguns erros que podem travar o sistema como a falta de memória que ainda funcionam como nas versões anteriores do PHP.
Nova hierarquia para erros e exceções
No PHP 7 uma nova hierarquia foi implementada para trabalhar com exceções e erros. Ela foi baseada na Throwable pull request de Sebastian Bergmann.
- Interface Throwable
- Exception implements Throwable
- Error implements Throwable (Replaces EngineException)
- Error type extends Error
- ParseError extends Error
Assim, as exceções e erros implementam a interface Throwable.
A interface Throwable especifica os seguintes métodos:
- getMessage ()
- getCode()
- GetFile ()
- getline ()
- getTrace ()
- getTraceAsString()
- __toString ()
O nome Error foi escolhido para corresponder com outros erros do PHP. Erros não fatais continuarão a disparar alertas e avisos, enquanto os erros fatais são lançados como Error exceptions.
Classes definidas pelo usuário não podem implementar Throwable. Esta escolha foi feita em parte de previsibilidade e consistência: apenas casos de exceptions ou error podem ser acionada.
interface MyPackageThrowable extends Throwable {} class MyPackageException extends Exception implements MyPackageThrowable {} throw new MyPackageException();
Só acredito vendo!
Vamos lá! Hora de meter a mão na massa (ou teclado) e programar um pequeno teste.
Para iniciar, instalei o PHP 7 e baixei o PHP 5.6 para realizar os testes e poder comparar. A ideia foi de salvar os dois na raiz do pc (no C do Windows) e alterar o nome das pastas para testar um e depois testar o outro usando o Servidor embutido de cada um. O teste será com o seguinte código:
function add(int $left, int $right) { return $left + $right; } try { echo add("left", "right"); } catch (Exception $e) { echo "Exception: " . $e->getMessage(); } catch (Error $e) { echo "Error: " . $e->getMessage(); }
O sistema irá gerar o Erro por causa do tipo dos valores que estou passando por parâmetro e assim cairá no Error e se estiver rodando no PHP 7 a mensagem END será exibida. Já no PHP 5.6 o Erro irá parar todo o script e a mensagem END não será exibida.
Criando um classe para as nossas exceções
Vamos agora realizar um teste e mostrar como implementar uma nova classe com exceções personalizadas.
<?php interface MyPackageThrowable extends Throwable {} class MyPackageException extends Exception implements MyPackageThrowable {} function add(int $left, int $right) { if($left < 0){ throw new MyPackageException('Left < 0'); } return $left + $right; } try { echo add(-4, 3); } catch (Exception $e) { echo "Exception: " . $e->getMessage(); } catch (Error $e) { echo "Error: " . $e->getMessage(); } echo "<br/>end";
No exemplo acima, rodando no PHP 7, vamos verificar a exceção que definimos na classe MyPackageException que estende de Exception. Podemos criar também Erros personalizados da mesma forma apenas alterando e estendendo de Error.
Assista ao teste no vídeo
Esse é aquele momento que eu peço para que você clique no play e assista ao teste no vídeo. Deixe seu comentário aqui se tiver dúvidas ou sugestões. Forte abraço!