In fact, when a user defined error_handler is called for an expression silenced by @-operator, the return value of
error_reporting() != E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE (or the number 4437),
but the value masked by your current error_reporting level, that is
error_reporting() &= E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE,
which for E_ALL level gives us exactly 4437.