|
||
|
|
| Conheça o Plugfeed | » Início » Programação » PHP » Exception com php --> |
|
Avaliação: Não avaliado | Publicado em: 01/06/2008
Exception com php
José Roberto Gomes da Silva programador PHP na RCT Retail, desenvolve trabalhos em PHP/Javascript, Action Script
Exception com php
Desenvolvi e utilizo uma classe para tratamento de erros com exception em php que vou compartilhar com vocês agora. Esse método de exception pode ser encontrado no php.net, e pra mim é um método bem flexivel para tratamento de erros. Tentei deixar bem comentado na construção da classe para ficar mais fácil de ser entendido os métodos que principais de utilização bem... vamos à classe. /** * Declaração da classe para tratamento de erros * A classe deve ser extendida da classe Exception do PHP */ class MyException extends Exception { //Faço a declaração das variávis que vou utilizar no corpo da classe private $cod = 0, $msg = "", $erromsg = ""; //Aqui faço a declaração do método construtor de classe // Esse método recebe os seguintes parametros: // $cod - Código de erro // $msg - Uma mensagem de erro personalizada // $erromsg - Uma mensagem de erro padrão public function __construct( $cod = 0 , $msg , $erromsg ) { //Sobreescrevo as propiedades da classe passando os parametros $this->cod = $cod; $this->msg = $msg; $this->erromsg = $erromsg; //Aqui eu chamo o construtor da classe pai para garantir o funcionamento correto da minha classe parent::__construct( $msg , $cod ); //Aqui chamo o método de gravação do log da minha classe //Este método vai gravar em um arquivo texto os erros que a exception detectar $this->WriteLog(); } /** * Metodo retorna erro formatado */ public function getError() { //Com a chamada desse método imprime na tela o erro captado pela exception return "<hr><pre>" . "<br>" . "Erro[ {$this->cod} ] {$this->msg}<br>{$this->erromsg}" . "</pre></hr>"; } /** * Método grava num log o erro gerado */ private function WriteLog() { //Define o arquivo que será criado ou gravado caso exista //Coloco como nome o nome da classe seguido de log e da data de criação do mesmo $txt = __CLASS__ . "_log_" . date("dmY") . "txt"; //Verifico se o arquivo existe, caso não exista defino o cabeçalho do arquivo de log if( !file_exists( $txt )){ $msg = "/************************************************** " . " * Arquivo de log para Moneraty " . " * " . " * ClassName: " . __CLASS__ . " " . " * Data Criação: " . date("d/m/Y H:i") . " " . " * Autor: José Roberto [PHP/Javascript] " . " *************************************************/ " . "------------------------------------------------------------------- "; }else $msg = ""; //Abro o arquivo para edição if( $file = fopen( $txt , "a+" ) ) { //Preparo a mensagem que será gravada no arquivo de texto $msg .= __CLASS__ . " hora: ".date("H:i") . " " . "Erro [ {$this->cod} ]: linha ( {$this->line} ) " . "{$this->msg} " . "{$this->erromsg} " . "------------------------------------------------------------------- "; //Executo a gravação do arquivo e em seguida fecho o mesmo fwrite( $file , $msg ); fclose( $file ); } } /** * @param Integer $cod #Codigo do erro * @param String $msg #Mensagem de erro * @param String $file #Arquivo * @param Integer $line #Linha * @example Método para chamar no erro handler # set_error_handler(array('MyException', 'throwError'), E_ALL); * * @static */ static public function throwError( $cod , $msg , $file , $line ) { //utilizo esse método para setar no erro Handler a chamada da classe $this->file = $file; $this->line = $line; throw new MyException( $cod , $msg ); } } Para chamar a classe no script basta criar um bloco try catch utilizado ela como parametro e usar o throw para dispara a exception, ou setar direto no erro_handler Ex: try{ caso haja algum erro na conexão com a base de dados, o bloco catch será chamado if( !$db = mysql_connect("host","usuario","senha") ) throw new MyException( mysql_errno() , "Não foi possível estabelecer conexão com a base!!!" , mysql_error() ); }catch( MyException $exception ){ //aqui eu chamo o método para gravação no log caso eu queira que o erro seja gravado... $exception->WriteLog(); //da mesma forma se eu quiser printar o erro na tela, chamo o método encarregado de retornar o erro formatado. print $exception->printErro(); } ou setar direto no erro_handler: Ex: //associo ao handler a classe MyException statando o método static set_error_handler(array("MyException","throwError"), E_ALL ); Desta forma eu tenho várias possibilidades de tratar meus erros de uma forma bem prática. Espero que gostem.... abraço!!! ![]() |
|
![]() |
|
|