为什么set_error_handler不包括不在error_types中的错误?

Here is my definition:

set_error_handler('errorHandler', E_ALL ^ E_NOTICE ^ E_STRICT ^ E_DEPRECATED);

So essentially, I'm giving set_error_handler a value of 22519, which excludes the above error types. However, my errorHandler function is still receiving strict errors. I haven't tested it with notices. My function is pretty basic:

function errorHandler($number, $string, $file, $line) {
    $message = "$number: $string in $file on line $line";
    throw new \Exception($message, $number);
}

And I get things like:

Exception 2048 2048: Declaration of X should be compatible with that of Y in XF on line 19 in ErrorHandler.php on line 70

As you can tell, I want all PHP errors to throw an exception for ease of debugging.

By Googling E_ALL or E_STRICT, I discovered that E_STRICT became part of E_ALL in PHP 5.4.0, but my server is PHP 5.3.0. This explains the discrepancy.