AndersonArruda

Artigos de tecnologia ao alcance de um clique!


Tratamento de Exceção em PHP
php try catch exceção bug report error report set_error_handler

Tratamento de Exceção em PHP

18/05/2023 20:35

Olá, olha eu novamente aqui escrevendo um artigo interessante de desenvolvimento de sistema em PHP para vocês.

Dessa vez falares de tratamento de exceções um pouco além do que try, catch e finally.


Tratamento de erros são importantes para diversos fatores, tanto para evitar comportamentos inesperados, como pra evitar erros incompreensíveis na cara do usuário final.


Claro que são blocos de códigos muito importantes e essenciais e vamos falar sobre eles também vou usar alguns exemplos que no cotidiano não usaria, faria exceções dentro do próprio bloco de tratamento de código, porém para contextualizar as inúmeras possibilidades que poderíamos fazer com try catch vou utilizar o contexto que venho estudando na faculdade.


Contextualizando para que possam entender o código, quando falamos de limites em matemática podemos chegar a situações cujas quais o limite é indefinido então usamos várias regras matemáticas para aproximar o valor desse limite, e ainda assim em algumas situações ele só existe lateralmente, enfim não é um tema de matemática então não vou aprofundar nisso.


<?php

function limit(float $x) : float
{
  return (pow($x,2) - 4) / (pow($x,2) - $x - 2);
}

var_dump(limit(2));

?>

Esse código retornará uma exceção quando o x tender para 2, pois ocorrerá uma divisão por zero. O código apresentado será:

Warning: Division by zero path.php on line 4

float(NAN)


Claro que nesse caso seria mais interessante usar um if ali e condicionar o limite, mas como quero representar possibilidades de uso do try catch vou fazer um pensamento um pouco diferente do que usaria no meu cotidiano.


Exemplo fora do cotidiano


<?php
function limit(float $x) : float
{
  try{
    $limit = (pow($x,2) - 4) / (pow($x,2) - $x - 2);
    return $limit;
  } catch(DivisionByZeroError $err){
    //aqui vou usar o modelo decomposto da mesma equação
    //a expressão (x²-4)/(x²-x-2) pode ser decomposta e reescrita como
    //numerador: (x+2)(x-2) = (x²-4)
    //denominador: (x-2)(x+1) = (x²-x-2)
    //cancela-se os (x-2) ficando com a expressao (x+2)/(x+1)
    return ($x+2) / ($x+1);
  }
}

var_dump(limit(2));
?>



Classe customizada de exceção

<?php
class myException extends Exception{
  public function __toString()
  {
    return $this->getMessage();
  }
}

throw new myException('teste');
?>


Claro que dentro dessa classe você pode escrever o comportamento que quiser, conforme se adequar a suas necessidades.


Error Report / Bug Report


Tem um recurso no PHP que eu também gosto de usar bastante, set_error_handler com ele eu consigo capturar todos os erros inesperados e o que eu gosto de fazer é armazenar esses erros em banco de dados para posteriormente tratá-los, normalmente anoto vários valores possíveis e armazeno, vamos dizer que vamos armazenar em JSON em um MongoDB por exemplo, não vou expressar o código para acesso ao MongoDB mas vou preparar na função abaixo como expressaria na parte do php.


<?php
set_error_handler(function(string $id, string $msg, string $file, int $line){
    $arr = [
      ‘id’ => $id,
     ‘message’ => $msg,
     ‘file’ => $file,
     ‘line’ => $line,
     ‘get_parameters’: $_GET,
     ‘post_parameters’: $_POST,
     ‘session_parameters’: $_SESSION
   ];
  //codigo para insersão do comportamento inesperado em um banco de dados para tratamentos posteriores.
  exit(‘Ocorreu um erro inesperado que já foi reportado para nossos administradores! Por favor tente novamente mais tarde!’);
});
?>


Com esse exemplo acima você passa a armazenar todos os erros que aconteceram no seu sistema, se colocado estrategicamente, evitando apresentação de erros incompreensíveis e também de vulnerabilidades.

Óbvio que nós como desenvolvedores lutamos sempre para evitar que erros ocorram em sistemas, mas cedo ou tarde algum erro irá ocorrer e ter um sistema que os captura para um tratamento posterior facilita e muito a redução de comportamentos inesperados.


Espero que esses exemplos tenham ficado claro, eu queria mesmo dar ênfase nesse último uma vez que no meu ponto de vista é o mais interessante de todos, e o que mais me ajuda no dia a dia.


Desde já agradeço a todos!

Quem puder dar sugestão de outros tópicos será muito bem vindo!

Até a próxima!

Espaço para publicidade
0 Comentário(s)
Seja o primeiro a comentar o nosso artigo!
Todos os direitos reservados. © 2021-2031
SBBlog Powered By Powered By Sysborg | Powered By Anderson Arruda