Grab the RSS feed

Tratamento de Exceções



"Você pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direção".
Steve Jobs
 
Diante desta inspiradora frase, vou falar hoje sobre tratamento de exceções em PHP.
É compreensível que algumas pessoas ainda não  enxerguem  a utilidade deste recurso,  pois a depender do tamanho  do projeto, realmente não se faz necessário.
Caso seja dito  aqui algo que  desconheça, A documentação é a melhor fonte para sanar tais duvidas.

Let’s GO!

A  pergunta mais freqüente é : Qual  a vantagem do tratamento  de erros?
lembro que essa foi  a  primeira quando  Emmanuel  sugeriu  utilizarmos(rs...).
- Depuração rápida e eficiente do código.
- Apresentação simples e rápida do ocorrido.
- A criação de um log de erros.
- auxilia na documentação.
- e como o nome sugere,  te permite tratar, ou seja, manipular esses erros.

Te apresento  então a função  die().
É muito  simples de ser usado.




$arquivo = fopen(“inexistente.txt”,”r”);


O  arquivo não existe e ele retorna o seguinte erro:



Warning
: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in www\tutorial\trat_eror.php on line 2


O tratamento  desse erro passaria primeiramente pela checagem da existência do arquivo. E então a função  die() se encarregaria de apresentar o  erro  ocorrido, veja:




If(!file_exists(“inexiste.txt”)){
die(“Aquivo não existe!”);
}else{
$arquivo = fopen(“inexistente.txt”,”r”);
}



E mudamos de forma simples a aparência do  erro apresentado :
Arquivo não existe!

Agora é possível entender com maior clareza a importância de tratamento de erro em projetos de pequeno médio e grande porte.
            Certo, entendemos porque implementar esta checagem, mas o tratamento de exceção requer um log para verificar  a persistência do  erro, mas agora vamos sofisticar um  pouco  mais (rs...).

Em POO no PHP podemos tratar erros de forma mais limpa e “sofisticada”.
Seu usuário não precisa ser notificado do erro, nem  o sistema precisa parar para isso, por isso  utilizaremos as Exceções, que são objetos derivados da classe Exception do PHP.
Para disparar uma exceção utilizamos a palavra throw, vamos usar nosso exemplo acima.





Class lerArquivo {
Public function abrir           ($arquivo){
if (!file_exists(“$arquivo”)){
throw new Exception(“Arquivo não encontrado”);
}
}

}
$abre = new lerArquivo;
$abre->abrir(“inexistente.txt”);


Você vai notar que ele exibe uma mensagem onde indica dados de todas as propriedades  da classe.

Usaremos para não  exibir a  mensagem de erro o try do PHP, veja:




Class lerArquivo {
Public function abrir           ($arquivo){
if (!file_exists(“$arquivo”)){
throw new Exception(“Arquivo não encontrado”);
}
}

}
try{
$abre = new lerArquivo;
$abre->abrir(“inexistente.txt”);
}
catch (Exception $e){
$open_log = fopen(“log_error.log”,”w”);
fwrite($e->getMessage() );
$close_log = ($open_log);
}          


Verificando as alterações no código, percebemos o trow disparando  a exceção, em um try logo  abaixo recuperamos a mensagem através do catch e setamos o valor que queremos imprimir em nosso log_error.log , no caso o getMessage.
existem outros métodos disponíveis e que detalharei  mais abaixo.
  • getMessage: Retorna a mensagem de erro;
  • getCode: Retorna o código de erro;
  • getFile: Retorna o arquivo do qual ocorreu o erro;
  • getLine: Retorna a linha na qual ocorreu o erro;
  • getTrace: Retorna um array com todos os métodos e arquivos chamados até o erro ocorrer;
  • getTraceAsString: Retorna o array usado em getTrace como uma string.


Lembre-se, , comentário faz parte da documentação  do  código.
E existe a documentação PHP para ser consultada quando  precisar, devemos primar pela qualidade do código  estude e descubra qual é o  melhor método  para realizar suas tarefas,

Paz!


                                                                                       


Entendendo LOOP - For e While

Geralmente penso muito sobre simplicidade e vejo  muito  sobre a  ótica de Jobs., então sempre que possível publicarei algumas referencias dele, é o  que tem norteado minhas ações ultimamente.

               Na maioria dos casos, forças e fraquezas são dois lados da mesma moeda. Uma força em uma situação, uma fraqueza em outra, mas frequentemente as pessoas não conseguem trocar as marchas. É uma coisa muito sutil falar sobre forças e fraquezas porque elas sempre são a mesma coisa.
Steve Jobs


Laços de repetição são  usados para processar determinadas operações seqüencialmente de forma determinada por um numero  especifico de vezes ou  até que uma condição  seja satisfeita. E este laço pode  também ser chamados de loop.

2. While.

O WHILE (enquanto) é um loop que se mantém enquanto  a condição for verdadeira.
Na sua estrutura esse laço de repetição afirma  uma comparação. E enquanto  a sentença for verdadeira  executa o código em seu escopo.

Ex.:
 (comparação){
Código a ser executado
}

Exemplo prático:
$i = 1;
While($i<10){
echo $i.” ”;
}

O resultado do código acima será:  1 2 3 4 5 6 7 8 9 10

2. For.

O loop FOR é orientado por um numero definido de loops (voltas),  o que evita o risco de loops infinitos.
E sua estrutura conta com três etapas: onde você declara a variável ( geralmente um contador), a condição para a execução  e o incremento  da variável.
Ex.:
for (declaração de variáveis; condição de execução; incremento de variáveis)
{
//bloco de código a executar
}

Exemplo Prático:
for ($i=1; $numero<=10; $numero++)
{
echo $i
}

O resultado do código acima será:  1 2 3 4 5 6 7 8 9 10


Analisando  a real função  do loop examine a aplicação dos laços, qual é  melhor e bom trabalho. Fique atento e consulte sempre  o  manual  do php disponível php.net.

Dicas para otimizar seus códigos PHP

O PHP é uma linguagem de processamento server side o que proporciona melhor desempenho nas respostas  das solicitações feitas pelo cliente.
 Para uma boa performance no processo e na exibição dos resultados, é preciso escolher a forma correta para se trabalhar. Então vamos entender melhor.

1. Otimizando saída dos dados.

Quando uma função é utilizada, precisamos saber qual sua finalidade, pois o uso de forma inadequada pode não mostrar diferença alguma em uma avaliação superficial, mas, este erro pode significar um ciclo despendioso e desnecessário no processamento dos dados em sistemas maiores.

 1.1 Use "echo" ao invés de "print".

De fato são peseudo funções o manual do php é claro qaunto  a isso, nenhum deles é considerado por permitir que sejam usados também sem parenteses.
Embora tenham a mesma função, de imprimir qualquer informação na pagina, o echo se mostra mais eficiente, pois o print faz na exibição uma verificação interna e retorna o valor, enquanto  o  echo, simplesmente imprime sem verificação ou  atribuição alguma.
Em alguns testes o  echo mostrou desempenho eficaz de até 20%  com relação  ao  print.

2. Aspas simples ou duplas ?

As aspas simples ( ' )  é usado para delimitar qualquer dado  alfanumérico como por exemplo:

     echo ' Acordei para lavar o carro! ';
Mas o uso deste delimitador requer um certo cuidado pois se o conteúdo possuir uma aspa simples, será interpretado como fechamento do delimitador.
Ao escrever um conteúdo alfanumérico com aspas duplas ( " ) corremos o mesmo  risco, entao vamos ver alguns casos e como lidar com isso.
     Maria disse: " Hoje é um bom dia para ir à praia !".
 Este período poderia ser escrito das seguintes formas:
     echo ' Maria disse: " Hoje é um bom dia para ir à praia !". '
Imagine então um período em  inglês, ficaria assim:
      Then the man said: "I'm a little tired".
       echo " then the man saind: \"I'm a little tired\".";
 Nota: A função  addslashes retorna a string com barras invertidas, é usada quando queremos escapar aspas ( simples ou duplas ) ou barra invertida ( \ ) para entrada no banco de dado.




Bom pessoal, é isso!
Aguardo os comentários e rm breve mais posts.

// Abri aqui o comentário, preciso agradecer a Jadson Moreira, sempre junto desde o "Nossa Rede", a palavra é FOCO. Grato também a Léo Grid ( cara de dedo ).