Erros são inevitáveis. Sempre, a falta de tempo que ronda os programadores, está relacionada não com a geração de códigos em si, mas com a eliminação de erros no código (debuging); uma longa e árdua tarefa. Não pense em erros como problemas, mas como oportunidades de melhorar seu código para certificar a funcionalidade do projeto final.
Esse artigo examina 4 tipos de erros na Internet, como reconhecê-los e, finalmente, como concertá-los rapidamente. Depois, eu dou uma olhada em erros do PHP em específico, incluindo como eles ocorrem.
Os 4 tipos de erros mais comuns em programação.
Normalmente, os erros na Internet podem ser divididos em 4 categorias. Vamos dar uma olhada em cada uma delas, mostrando um exemplo.
1. Erros de Sintaxe
Esses são erros de digitação ou outro erro no código que bloqueiam a execução de um script. Vamos ver um exemplo:
$i = 0
echo $i;
O código acima produz um erro, pois todas as linhas executáveis em PHP devem terminar em ponto-e-vírgula.
São também erros sintaxe o não fechamento de parênteses ou colchetes, erro de digitação de palavras-chaves, chaves sobrando, entre vários outros. Muitas vezes, erros de sintaxe são fáceis de diagnosticar por que as mensagens de erro mostram o problema e também sua localização.
2. Erros de Semântica
Erros de semântica envolvem códigos técnicamente corretos que contêm problemas com o significado do código. Já que os compiladores sempre apontam os erros, erros de semântica podem ser encontrados e diagnosticados, na maioria das vezes, sem muita dor de cabeça.
Olhe o exemplo:
include(“arquivo.txt”);
… seria um erro de semântica se o arquivo.txt não existisse e, dessa forma, não poderia ser incluído no documento. Note que erros de semântica podem se confundir facilmente com erros de sintaxe, porém, um script pode ser executado até o ponto onde está o erro, diferentemente dos scripts que contém erros de sintaxe. Isso se deve ao fato de conterem códigos corretos, como no exemplo acima. O que acontece é que o arquivo.txt não existe, mas o compilador não tem como saber disso enquanto ele não atingir a linha específica.
3. Erros de Lógica
São os mais difíceis de diagnosticar, erros de lógica contém códigos sintática e semanticamente corretos, mas não executam da maneira que o programador quer. Isso é o que deixa os programadores malucos, especialmente quando os códigos são extensos e complexos.
Erros de lógica podem ser simplesmente uso incorreto de operadores (+ no lugar de -, || no lugar de &&). Erros de lógica podem ser tão complexos quanto chamadas a registros de bancos de dados com SQLs mais elaborados. Podemos exemplificar uma lógica errada em PHP assim:
$estados = array (“MG”, “DF”, “SP”, “RS”, “CE”);
echo “O primeiro registro no array de Estados é ” . $estados[1];
Os 5 estados listados são gravados em um array chamado “estados”. O erro de lógica vem na segunda linha, quando queremos exibir o primeiro registro do array, ou MG. Programadores experientes notariam esse erro imediatamente, mas para aqueles que não tem muito conhecimento em programação, pode ser mais complicado. Essa forma de declaração de array faz com que o primeiro registro seja 0 e não 1. Para corrigir esse erro, basta modificar a saída estados[1] para estados[0].
Outro erro de lógica pode ser uma inclusão de um arquivo incorreto, deixar de tratar uma data, entre outros. Compiladores não podem encontrar erros de lógica, já que não tem conhecimento sobre o que o programador deseja fazer. No pequeno trecho de código acima, não há nada errado em exibir o registro número 1 do array, então o compilador executou sem problemas. Dessa forma, erros de lógica só podem ser encontrados e remediados pelo programador.
4. Erros de ambiente
Erros de ambiente são sempre desprezados, mas são bastante preocupantes na Internet. Erros de ambiente são erros que estão além do controle do programador, pode ser qualquer coisa além dos componentes de linguagem como, por exemplo, o valor da register_globals estar setado para off no php.ini. Notamos que erros de ambiente ocorrem com muito menos freqüência do que os outros tipos.
Erros Específicos do PHP
As mensagens de erro do PHP, na maior parte dos casos, são bastante amigáveis. Vamos dar uma olhada em algumas e qual código as produziu.
Código:
includ(“arquivo.txt”);
Erro:
Fatal error: Call to undefined function: includ() in c:program filesapache groupapachehtdocs estserveroperator.php on line 21
Comentário:
Assumindo que includ() seja uma função indefinida, um erro semântico ocorre e a execução pára. Como você pode ver, o PHP mostra o erro e alguns detalhes (função indefinida), além de fornecer a linha onde ocorreu o erro.
Código:
$i = 1
echo $i;
Erro:
Parse error: parse error in c:apache htdocs esteoperadores.php on line 13
Comentário:
Usando o erro de sintaxe acima, o compilador sem dúvida irá achar a falta do ponto-e-vírgula na primeira linha do código. Contudo o erro não diz especificamente “Está faltando um ponto-e-vírgula”, um parse error diz ao programador que ocorreu um erro de sintaxe. Isso permite ao programador afiar sua habilidade de ‘debugar’ um tipo de erro específico.
Devemos lembrar que se o parse error for erro de sintaxe, nada será executado no script. Uma vez adicionado o ponto-e-vírgula à primeira linha do código, o script funcionará com sucesso.
Código:
// $j nem foi declarado ainda…
echo $j;
Erro:
Warning: Undefined variable: j in c:apache htdocs esteoperadores.php on line 12
Comentário:
Como você pode ver, isso é um aviso, não um erro (neste caso, a mensagem de atenção – warning – também é conhecida como nota – notice). Warnings ocorrem quando o PHP determina que alguma coisa está errada com o script, mas não é grave o suficiente para parar a sua execução.
É essencial entender que warnings não param a execução de um script. Quando um warning é encontrado, uma mensagem será exibida junto da saída do script, onde a linha do código contiver o problema. O PHP continuará a executar o restante do código até o fim.
Por exemplo, o código seguinte:
$i = 1;
echo $x;
echo $i;
Produzirá essa saída:
Warning: Undefined variable: x in c:apache htdocs esteoperadores.php on line 21