From Get docs

Error Control Operators

PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored.

If you have set a custom error handler function with set_error_handler() then it will still get called, but this custom error handler can (and should) call error_reporting() which will return 0 when the call that triggered the error was preceded by an @.

Any error message generated by the expression is available in the "message" element of the array returned by error_get_last(). The result of that function will change on each error, so it needs to be checked early.

<?php/* Intentional file error */$my_file = @file ('non_existent_file') or    die ("Failed opening file: error was '" . error_get_last()['message'] . "'");// this works for any expression, not just functions:$value = @$cache[$key];// will not issue a notice if the index $key doesn't exist.?>


The @-operator works only on expressions. A simple rule of thumb is: if you can take the value of something, you can prepend the @ operator to it. For instance, you can prepend it to variables, function and include calls, constants, and so forth. You cannot prepend it to function or class definitions, or conditional structures such as if and foreach, and so forth.

Warning Currently the "@" error-control operator prefix will even disable error reporting for critical errors that will terminate script execution. Among other things, this means that if you use "@" to suppress errors from a certain function and either it isn't available or has been mistyped, the script will die right there with no indication as to why.