It suppresses errors that happen inside an expression.
See the PHP manual for more details (look at error handling, or operators)
Be very careful when using @ with function calls. Example:
$something = @ $_POST['optionalfield']; // Ok, suppress warning about optionalfield not existing
$something = @ SomeBigComplicatedFunction($something); // Not ok, entire function will run with error handling disabled.
One of the problems I have with the @ operator is that it also disables error handling for fatal errors, which causes the request to stop entirely silently. This is not normally desirable, nor is it helpful when it happens inside a large application in a complicated function.
Mark