Resolvendo Problema de Escopo de Variáveis PHP

Por mais que tenhamos conhecimento de como funciona o PHP, as vezes, nos deparamos com alguns problemas que acabam com nosso dia. Realmente não há jeito melhor do que contar com a experiência de quem já passou por isso para se chegar a solução desejada. Hoje vou explicar como funciona o escopo das variáveis em PHP, e já dar algumas dicas para evitar problemas futuros.

Escopo de váriáveis é o termo usado para definir o contexto em que uma determinada variável está inserida. Por padrão, as variáveis tem o escopo no “modo” global (fora de funções e métodos). Há dois contextos:

  • Global – Como o próprio nome já diz, é global, ou seja, atige toda a programação (com algumas restrinções).
  • Local – Retringe-se ao local onde está inserida. Aplicado por padrão em funções. Não dá para se usar uma variável de uma função em outra função por exemplo.

Agora que você já tem idéia do escopo de uma variável, vamos entrar em alguns detalhes:

Como Converter Arrays em Objetos e Vice-Versa Usando Uma Linha de Código

Nem sempre o que temos é o que queremos, e trabalhar com arrays e objetos simultaneamente acaba se tornando chato, eu pessoalmente não gosto muito de arrays, principalmente quando é para exibir na tela os resultados de uma pesquisa do banco de dados ou coisa do tipo.

Já vi em muitos código fontes, funções um tanto que imensas para realizar a tarefa de conversão de tipos – arrays para objetos ou objetos para arrays. Mas o que muita gente não sabe é que existe um atalho para isto, simples e rápido. Vejamos um exemplo:

$dados = array('nome' =>'Mateus', 'sexo'=>'Masculino');
echo $dados['nome']; //Resultado: Mateus
echo $dados->nome; //Resultado: Erro

$dados = (object) $dados; //É aqui que tudo funciona...
echo $dados->nome; //Resultado: Mateus

Anteriormente tinhamos uma array – $dados -, que em um “passe de mágica” virou um objeto. Para converter um objeto em uma array o processo é bem simples também:

$array = (array) $objeto;

Também é possível formatar outros tipos, como string, integer ou float:

$numero = (float) $numero;
$boolean = (boolean) $boolean;
$string = (string) $string;
....

Tecnicamente falando, este processo é chamado de Type Casting, ou Tipo de Vazamento em português e como o próprio nome já diz, ele converte o modo de vazamento (ou distribuição) de um elemento. Para saber um pouco mais, veja no manual do PHP sobre Type Casting.

Se você não sabe o tipo do elemento, use a função var_dump ou a função para debug. Até mais.

Debug, a Função Que Faltava no Core do PHP

Quem nunca fez um debug em PHP? Debugar objetos, arrays, strings ou seja lá o que for é sempre uma tarefa repetitiva, você sempre faz a mesma coisa, até o que não precisaria ser feito. Esta dúvidando? Então preste atenção quando for debugar seus códigos em PHP, ASP, Python…

Agora eu apresento a vocês a função DEBUG; uma função, uma linha e mais tempo pra tomar café e brincar com seu cachorrinho:

/**
 * Debug simples para objetos, arrays, strings ou qualquer tipo de dados
 * Adiciona tags HTML para melhor visualização
 * @param mixed $elem - elemento a ser debugado
 */
function debug($elem){
	echo '<pre>';
	var_dump ($elem);
	echo '</pre>';
}

E como ninguém é de ferro, um exemplo:

debug($objetoX);
debug($minhaArray);
...

Fica ai o Snippet em PHP pra quem já cansou de ficar dando echo sempre ;).