Entendendo os avisos Undefined Variable e Undefined index

(0 - user rating)
User Rating:  / 0
PoorBest 
Details

Nesse artigo irei explicar o que significa a mensagem do PHP “Notice: Undefined variable ou Undefined index” e como evitar esse tipo de erro.

Para entender esse tipo de mensagem, observe o exemplo abaixo:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $x = $y + 10;
  4.  
  5. ?>

Executando esse script, que valor deve conter a variável $x?

Você deve responder, impossível dizer, não sei qual é o valor da variável $y. Para o PHP a resposta é a mesma, para ele está sendo feito a seguinte operação internamente:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $x = valor indefinido + 10;
  4.  
  5. ?>

A maneira correta e fazer a seguinte operação:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $y = 5;
  4.  
  5. $x = $y + 10;
  6.  
  7. ?>

ou

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $y = 0;
  4.  
  5. $x = $y + 10;
  6.  
  7. ?>

Toda vez que é feita uma operação com uma variável “valor indefinido” o PHP exibe a mensagem Notice: Undefined variable.

Muitas vezes os nossos problemas de programação são mais complexos, pois estamos trabalhando com variáveis passadas por SESSION, GET, POST e outros métodos, para trabalhar dessa forma e necessário avaliar a condição da variável, por exemplo:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. if (!isset($y)) {
  4.  
  5. $y = 0;
  6.  
  7. }
  8.  
  9. ?>

Esse script verifica se a variável existe, se a variável não existir é atribuído zero.

Pode ocorrer o mesmo erro quando estamos trabalhando com arrays e tentamos acessar uma posição que não existe, por exemplo:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $info_funcionario = array(
  4.  
  5. "nome" => "Patrick Espake",
  6.  
  7. "profissao" => "Programador");
  8.  
  9. echo $info_funcionario["email"];
  10.  
  11. ?>

No script acima estou tentando acessar o índice “email” no array, esse índice não existe e o PHP exibe a mensagem Notice: Undefined index email.

Você pode fazer a seguinte afirmação: “Já programei assim em PHP e nunca apareceu esse erro!”.

O que acontece é que essas notificações de erros podem ser configuradas no PHP.INI, muitos programadores em ambiente de desenvolvimento deixam configurado para exibir todos os erros e em ambiente de produção deixam configurado para não exibir os erros de notificação.

Para configurar o PHP.INI para mostrar todos os erros, você deve deixar a cláusula error_reporting da seguinte forma:

Show/Hidden ini code

View source
error_reporting = E_ALL

Para configurar o PHP.INI para não exibir as mensagens de notificação você deve deixar da seguinte forma:

Show/Hidden ini code

View source
  1. error_reporting = E_ALL & ~E_NOTICE

Em outras linguagens de programação uma variável não inicializada pode conter qualquer coisa, no PHP é considerado como nulo ou como 0 em uma operação aritmética.

Além disso, é mais rápido escrever:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. echo $_GET['id'];
  4.  
  5. ?>

do que

Show/Hidden php code

View source
  1. <?php
  2.  
  3. if isset($_GET['id'])) echo $_GET['id'];
  4.  
  5. ?>

Em casos extremos você pode usar o @ para ocultar as mensagens de notificação.

Show/Hidden php code

View source
  1. <?php
  2.  
  3. @echo $_GET['id'];
  4.  
  5. ?>

Eu considero esse método muito rigoroso, então é melhor fazer o que você acha melhor. Essas notificações podem ajudar durante o desenvolvimento, para detectar determinados erros.

Fonte: http://phpbrasil.com/artigo/wRC4X3NATJvY/notice-undefined-variable-ou-undefined-index

 

   

Login