Postagem

Aqui é onde faço postagens de coisas que acho interessante.

Tratamento de exceções no php

Postagem do dia 01/01/1970 na categoria PHP



Não é bom deixar erros de sistema aparecerem para o usuário, o sistema perde credibilidade e se torna ruim para o público. Para evitar essa situação, ocultamos a exibição de erros ao colocar o projeto em produção, mas isso não significa que o erro deixará de existir e nem que seu programa continuará funcionando.

Quando criamos uma classe, função ou método há uma grande chance de que esse recurso seja usado de forma errada e um erro seja disparado.

Para evitar que um determinado recurso seja usado errado, devemos dispará exceções, frases informando à outros desenvolvedores o que deve ser feito. A classe Exception é usada para disparar essas exceções: Throw new Exception( "Deve-se informar uma data válida" ), possibilitando o tratamento através do bloco try e catch.

Vou criar uma classe chamada Foo, dentro dessa classe terá o método chamado bar e recebe como parà¢metro um número qualquer. Caso não seja passado um número, o método irá dispará uma exceção com uma mensagem dizendo para informar um número.


<?php
namespace Library;

class Foo{

	public function bar( $arg0 = null )
	{
		if( $arg0 == null ){
			Throw new \Exception( "Você deve informar um número qualquer" );
		}else{
			echo $arg0;
		}
	}
}

$foo = new \Library\Foo();
echo $foo->bar();

Ao executar o código, deve ter aparecido um erro no navegador semelhante a este: Fatal error: Uncaught exception 'Exception' with message 'Voce deve informar um numero qualquer' in...

A mensagem de erro ainda aparece em nosso navegador. Para tratar isso sem desativar a exibição de erro e recuperar somente a mensgem usaremos o bloco try e catch.

<?php
$foo = new \Library\Foo();

try{
	$foo->bar();
}catch( \Exception $e ){
	echo $e->getMessage();
}

Se executarmos o código, no navegador irá aparecer a frase: Voce deve informar um numero qualquer
Você pode pegar essa mensagem e armazenar dentro de um arquivo de log, dispará essa mensagem por email, etc...

A mensagem disparada pela classe Exception não deve ser exibida para o usuário. Ela deve ser escrita de programador para programador com o intuito de orientar na hora de usar qualquer recurso.

O exemplo acima foi feito utilizando namespace, caso não queira usar namespace o código ficará da seguinte forma:

<?php
class Foo{

	public function bar( $arg0 = null )
	{
		if( $arg0 == null ){
			Throw new Exception( "Voce deve informar um numero qualquer" );
		}else{
			echo $arg0;
		}
	}
}


$foo = new Foo();

try{
	$foo->bar();
}catch( Exception $e ){
	echo $e->getMessage();
}



A classe Exception além do método getMessage() possui vários outros métodos e com eles é possível ver em qual linha do arquivo o erro ocorreu, mensagem, etc.. Para mais detalhes acesse o manual



Deixe seus comentários abaixo: