De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Tratando "variable is not defined" no PHP

Colaboração: André Milani

Data de Publicação: 19 de outubro de 2012

A mensagem de erro variable is not defined é uma antiga conhecida de programadores PHP e está relacionada diretamente ao acesso a uma variável que não tenha sido inicializada com algum valor anteriormente. Ao receber dúvidas de vários alunos, resolvi comentar os casos recebidos e apresentar soluções.

Falta de definição de valor (caso simples)

Em um dos códigos que observei, um comando for era montado da seguinte forma para realizar uma somatória:

  for($i=0; $i<10; $i++)
  {
  $total += $i;
  }
  
  echo $total;

Este código resultará no erro variable is not defined pois a variável $total não foi inicializada antes de ser utilizada. Como a variável não foi inicializada, na primeira execução do bloco de código do comando for o compilador tentará atribuir para $total o resultado da operação nada + 0. Observe que para o compilador nada é diferente de 0, o que acarretará na inviabilidade de realizar a soma. Para solucionar este problema, basta atribuir um valor para a variável $total antes do comando for, da seguinte forma:

  $total = 0;
  
  for($i=0; $i<10; $i++)
  {
  $total += $i;
  }
  
  echo $total;

Falta de definição de valor (caso register_globals)

O PHP possui um recurso conhecido como register globals, uma configuração no arquivo php.ini que permite que algumas variáveis sejam inicializadas pelo PHP. Vale a pena citar que este recurso tornou-se obsoleto a partir do PHP 5.3.0 e seu uso não é mais encorajado.

Alguns programadores que utilizam o register_globals tem o costume de acessar diretamente suas variáveis, da seguinte forma:

  if($_REQUEST["minhaVar"] == "valor")
  {
  ...
  }

Até aí, tudo certo. Contudo, quando o programador migra seu código para outro servidor PHP, ou obtém um código deste tipo na web e o seu servidor não está configurado para utilizar o register_globals, o erro variable is not defined é exibido nas situações onde o código apresentado é executado e não há a variável minhaVar na requisição da página. Nestes casos, como o programador pegou o código de outro servidor onde o código já estava funcionando, ele tem dificuldades em entender o motivo que o código não executa em seu servidor. O motivo é: um dos servidores está com a register_globals habilitada, o outro não. Mas tem solução!

Solução 1: habilitar a register_globals

A solução mais simples para a maioria dos casos é habilitar o recurso de register_globals no PHP. Isto é fácil de ser feito e existe bastante documentação no site do PHP e no Google sobre este procedimento. Contudo, pode não ser viável, dependendo da versão do seu PHP. Neste caso, outra solução deve ser adotada.

Solução 2: tratando o código

É possível tratar no código o acesso das variáveis para que o acesso a elas quando não definidas seja realizado. Basta realizar um comando que verifica se a variável em questão foi setada ou não. O comando isset faz isso: ele verifica se determinada variável existe e pode ser acessada ou não. O mesmo código apresentado anteriormente poderia ser alterado para o seguinte formato:

  if(isset($_REQUEST["minhaVar"]))
  {
  if($_REQUEST["minhaVar"] == "valor")
  {
  ...
  }
  }

Desta forma, somente se a variável $_REQUEST["minhaVar"] possuir algum valor é que o

acesso a mesma será realizada dentro do bloco de código do primeiro if. Caso contrário, o acesso não será realizado, e a mensagem de erro não surgirá.

Vale a dica: é possível otimizar o comando if para escrevê-lo da seguinte forma:

  if(isset($_REQUEST["minhaVar"]) && $_REQUEST["minhaVar"] == "valor")
  {
  ...
  }

O que ocorre nesta forma de comando if é que a segunda condição (a de acesso a variável) somente é realizada se a primeira condição do if for verdadeira. Ou seja, a variável somente será acessada se possuir algum valor.

Gostou da dica? Assista uma aula grátis do curso de iOS criado pelo autor: André Milani é instrutor oficial do curso on-line de PHP & MySQL da Softblue onde possui um blog sobre PHP e bancos de dados http://, formado em Ciência da Computação pela PUC-PR, pós-graduado em Business Intelligence pela mesma instituição e possui diversas certificações na área de TI. É também autor de vários livros na área de informática. Possui mais de 10 anos de experiência em desenvolvimento web, atuando há mais de 6 anos com cursos e treinamentos de profissionais. //**

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de André Milani