Prosa Digital – Tecnologia e Sociedade

Artigos técnicos e políticos sobre tecnologia, internet, programação, análise de sistemas, sociedade, política, religião entre outros. Seja bem vindo!

Transformando mensagens de erro em Exceções

800px-PHP-n_logo.svgEm PHP, somente as extensões mais modernas lançam exceções. As funções internas do PHP e a grande parte das extensões não trabalham com exceções, mas usam principalmente o Error Reporting.

Uma boa prática de programação é saber trabalhar com exceções. Para que esta prática se estabeleça, todos os erros ocorridos no sistema, devem ser, na verdade, exceções.

Isto não acontece com o PHP, onde exceções e erros “genéricos” são lançados simultaneamente no sistema, impossibilitando uma máquina de tratamento de exceções perfeita. Mas a boa notícia é que é possível transformar todos os erros do PHP em exceções.

Primeiro, vamos visualizar a sinopse da classe ErrorException. Ela será a classe de exceção que substituirá os erros gerados pelo Error Reporting:

ErrorException    extends  Exception   {

	/* Properties */
	protected int $severity ;

	/* Methods */
	public __construct ([ string $message [, int $code [, int $severity [, string $filename [, int $lineno ]]]]] )
	final public int getSeverity ( void )

	/* Inherited methods */
	final public string Exception::getMessage ( void )
	final public int Exception::getCode ( void )
	final public string Exception::getFile ( void )
	final public string Exception::getLine ( void )
	final public array Exception::getTrace ( void )
	final public string Exception::getTraceAsString ( void )
	public string Exception::__toString ( void )
	final private string Exception::__clone ( void )

}

Agora vamos tornar todas as mensagens de erro em ErrorException:

<?php

   function exception_error_handler($errno, $errstr, $errfile, $errline ) {
      throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
   }

   set_error_handler("exception_error_handler");

   /* Trigger exception */
   strpos();

?>

O trecho acima irá imprimir algo como:

Fatal error: Uncaught exception ‘ErrorException’ with message ‘Wrong parameter count for strpos()’ in /home/bjori/tmp/ex.php:8
Stack trace:
#0 [internal function]: exception_error_handler(2, ‘Wrong parameter…’, ‘/home/bjori/php…’, 8, Array)
#1 /home/bjori/php/cleandocs/test.php(8): strpos()
#2 {main}
thrown in /home/bjori/tmp/ex.php on line 8

Usando esta técnica, torna-se viável o emprego de uma perfeita máquina de tratamento de exceções em sistemas desenvolvidos em PHP.

Referência: http://www.php.net/manual/pt_BR/class.errorexception.php

No related posts.

Tagged as: , , ,

1 Comment

Leave a Response