Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Rambo

Classe para tratamento de Excessões

Recommended Posts

Boa noite :DPessoal, to precisando fazer uma classe que pegue todas as excessões que eventualmente ocorram dentro de um sistema e gravem num banco de dados...Andei pesquisando sobre tratamento de Excessões no PHP, mas não consegui pegar muito bem a lógica do negócio,alguém pode me passar mais informações sobre isso?[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

cria sua classe, extendo-a da classe nativa Exception do php ... algo do tipo

 

final class Perform_Exception extends Exception {  // e aqui vai o conteudo personalizado da sua classe}

depois tu usa um bloco "try catch" para pegar as exceções

 

try {	 if (pegou alguma exceção) { 		  throw new Perform_Exception ("Peguei uma exceção");	 }}catch(Perform_Exception $e){	   $e->log(); // sei la, aqui voce pode gravar no banco de dados o momento em que a exceção foi pega ...}

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse esquema de exceptions do php até agora não entendi mto bemmas terei de me extender nesse assunto para que meu TD fique 100%

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo com a maneira mais simples de trabalhar:

 

arquivo ExceptionsLayer.php

<?phpclass ExceptionsLayer extends Exception{	const NOT_NULL		= 1001;	const INCORRECT_FORMAT	= 1002;	const CONNECTION_ERROR	= 1003;	const SQL_ERROR		= 1004;		public function __construct($_mensagem, $_codigo)	{		parent::__construct($_mensagem, $_codigo);	}}?>

exemplo de uso no tratamento de uma conexão:

 

throw new ExceptionsLayer("Não foi possível conectar-se com a base de dados.",ExceptionsLayer::CONNECTION_ERROR);

 

capturando o erro:

 

try{			$resultado = verificaLogin($this->strLogin,$this->strSenha);}catch(ExceptionsLayer $ex){	if($ex->getCode() == ExceptionsLayer::CONNECTION_ERROR)	{		$strMensagemErro = $ex->getMessage();	}	... outros tratamentos.}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma duvidazinha: Como fazer pra essa minha classe "rastrear" qualquer erro que ocorrer no código php, sem eu precisar modificar tudo e colocar try/catch?Por exemplo se eu tenho um mysql_connect num lugar qualquer do meu php e eu quero que o erro "passe" por essa minha classe automaticamente, ou seja, eu quero que ela "gerencie" todos os erros que ocorrerem no meu script.Como?PS: Já tentei set_exception_handler, mas num deu certo[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

lendo um poko consegui fazer (copiar uns trechos tb nao faz mal)

Tipo fazendo assim eu pego todos erros da classe.. mais ainda assim não sei como trata-los corretamente.. e tb acho q nao eh isso que procuramos xD

 

class Pedidos{	const FATAL 	=	E_USER_ERROR;	const ERROR 	=	E_USER_WARNING;	const WARNING 	=	E_USER_NOTICE;		####################################################################	### Metodo construtor											 ###	### PHP 4														 ###	function Pedidos() { $this->__construct(); }	### PHP 5														 ###	####################################################################	function __construct() {			// Seta quais erros serao reportados		error_reporting(FATAL | ERROR | WARNING);		// Função que captura os erros		function meus_erros($errno, $errstr, $errfile, $errline) {			  switch ($errno) {					  case FATAL:						echo "<b>Erro fatal</b> [$errno] $errstr<br />\n";						echo "  Erro fatal na linha $errline no arquivo $errfile";						echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br />\n";						echo "Cancelando...<br />\n";						exit(1);						break;					  case ERROR:						echo "<b>Erro !!</b> [$errno] $errstr<br />\n";						break;					  case WARNING:						echo "<b>Alerta</b> [$errno] $errstr<br />\n";						break;					default:						echo "Erro Atual: [$errno] $errstr<br />\n";						echo "Cancelando...<br />\n";						exit(1);						break;				}		}		// Seta os erros para a funcao acima		$old_error_handler = set_error_handler("meus_erros");	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não confunda erros, com exceções ....Erro é uma coisa, exceção é outra !Não tem como voce fazer isso nãoabrass

Mais uma duvidazinha: Como fazer pra essa minha classe "rastrear" qualquer erro que ocorrer no código php, sem eu precisar modificar tudo e colocar try/catch?Por exemplo se eu tenho um mysql_connect num lugar qualquer do meu php e eu quero que o erro "passe" por essa minha classe automaticamente, ou seja, eu quero que ela "gerencie" todos os erros que ocorrerem no meu script.Como?PS: Já tentei set_exception_handler, mas num deu certo[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não confunda erros, com exceções ....

Erro é uma coisa, exceção é outra !

Não tem como voce fazer isso não

se isso foi pra mim.. deixei bem claro que falei ERROS e nao exceção

 

Tipo fazendo assim eu pego todos erros da classe.. mais ainda assim não sei como trata-los corretamente.. e tb acho q nao eh isso que procuramos xD

mas de certa forma uma exceção não deixa de ser um erro:

 

"A exceção é um recurso de linguagens de programação modernas que serve para informar que uma condição incomum ocorreu."

 

...

 

"Uma exceção é um evento que foge ao fluxo normal esperado de um programa."

 

 

e voltando ao assunto do topico.. acho só eh possivel usando try.. catch mesmo inside..

pelo menos ainda nao vi como fazer sem usa-lo .. se conseguir alguma coisa posta pra galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

não véi, não foi pra voce cara, é só ver a citação em meu post.Continuo a insistir que uma exceção, obrigatóriamente não é um erro.Erros: parse error, fatal error e etc ... // isso é um erro de programação, que pelo oque eu entendi, são esses erros que o nosso amigo quer auditar, ou controlarExceção: Campo não preenchido, campo preenchido de forma incorreta. // pode ser um evento incomum dentro da lógica de negócios por exemplo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erros:

São gerados por erros de programação ou eventos sobre os quais o programador não tem controle.

São gerados pelo PHP.

O PHP oferece funções para emitir/exibir/tratar esses erros.

http://br.php.net/manual/pt_BR/ref.errorfunc.php

 

Exceções:

São eventos incomuns dentro da sua lógica, uma exceção.

Existem pré-requisitos para que os objetos existam ou executem determinados métodos, se esses pré-requisitos não forem cumpridos pelo objeto/método solicitante, é lançada uma exceção.

São gerados pelo sistema.

Uma explicação bacana sobre isso:

http://www.digitalminds.com.br/blog/posts/3302

 

Ou seja, tudo o que o Void : já disse. = )

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.