EL @ "ofusca" los mensajes de error que puedan arrojar dichas llamadas a tus funciones (o variables). Pero los log de PHP (si los tienes activados) para errores se siguen haciendo.
Los puedes usar (el @) cuando realmente des por terminado tu script (y lo lleves a "producción") .. Mientras tanto trabaja sin @ sino, no veras mensajes de error y no sabras por donde anda el falló (si corresponde).
El @ usado en conjunto con una estructura de control tipo if() o similar puedes "personalizar" tus própios mensajes de error sin que -a su vez- PHP muestre los suyos (como suele pasar).
ejemplo:
Código PHP:
if (@!mysql_connect(....)){
echo "NO se conectó a la BD";
}
De esta forma .. forzamos a PHP a que no muestre el mensaje de error característico si falla la conexión a tu BD y mostramos el nuestro. (la mayoría de funciones .. son "booleanas" en cuanto a que si no hacen lo que deben hacer .. devuelven un "FALSE" .. así que las podemos usar en estructuras de control tipo condicionales.
Un saludo,