The at sign is used to hide error messages. As far as I see, there is absolutely no use case or excuse for using it.
In most cases you should indeed not use it. Some cases it makes sense though:
unlink()
while (@ob_end_flush());
There might be some other edge cases, but besides these you should really never ever supress errors.