Programo em PHP há 6 anos. Me lembro que, quando estudava os primeiros comandos e aprendia a sintaxe do if, lí em algum lugar uma maneira de preencher os valores de um formulário, desde que esses valores existissem. Seria algo mais ou menos assim:

<form id=”form1″ name=”form1″ method=”post” action=”cadastrar.php”>

<label for=”nome”>Nome:</label><br />

<input id=”nome” name=”nome” type=”text” value=”<?php if(isset($nome)){ print($nome); } ?>” />

<label for=”nome”>Idade:</label><br />

<input id=”idade” name=”idade” type=”text” value=”<?php if(isset($nome)){ print($idade); } ?>” />

</form>

Perceberam a lógica do formulário acima? Caso exista a variável $nome, ele irá predefinir o valor do input com a variável $nome. Isso pode ser muito útil para se fazer formulários que devem editar dados já existentes.

É duro quando as vezes descobrimos soluções simples, que facilitam bastante  a nossa vida, e então pensamos “uau! como eu não pensei nisso antes??”.

No PHP existe um operador que, por muito é esquecido pela maioria dos programadores. Trata-se to @.

O que ele faz de tão importante? Simples: Ele apenas diz pro interpretador do PHP “calar a boca”, ou em termos mais polidos, ele indica ao interpretador que, mesmo que o comando que precede a ele retorne um erro (não importa qual o grau do erro), ele não deverá ser exibido ao usuário. Já vi muito esse operador aplicado em conjunto com funções de acesso a banco de dados

$conn=@mysql_connect($hostname, $username, $pass);

Com isso, se a função mysql_connect() retornar algum erro, esse não será exibido, graças ao @ que precede o comando.

Desde o inicio, eu sempre conheci esse operador, mas nunca me emprenhei a procurar uma maneira mais útil de empregá-lo nos meus projetos. Esta semana, enquanto estudava um método de utilizar Ajax para validar meus formulários, vi uma maneira bastante criativa de utilizar o @ para verificar a existência de uma variável.

Se eu utilizasse, em vez da maneira tradicional, a seguinte forma:

<input id=”idade” name=”idade” type=”text” value=”<?= $idade;  ?>” />

Isso me daria, sem sombra de dúvidas, um código muito mais limpo e facil de compreender. Mas traria um problema: Caso a variável $idade não tenha sido definida, ele iria preencher o valor do campo com um erro de “variable is not set”. Qual seria a solução? Usar o metodo de validação de variável como fiz acima? Ou talvez criar um código que setasse a variável $idade com um valor em branco no inicio do formulário?

Não. Existe uma forma muuuuito mais simples: Utilize o operador @!

<input id=”idade” name=”idade” type=”text” value=”<?= @$idade;  ?>” />

Caso a variável $idade estiver setada, o seu valor será impresso. Caso contrário, o operador @ irá se encarregar de ocultar a mensagem de erro gerada, nada será impresso, e seu código ficará muito mais limpo! ;-)

Fácil ou não?