A #PHP variadic argument collects all the unused named parameters, along with their key. That way, it is possible to handle them with their name inside the method.
On the other hand, array_merge (and some cousins) refuse them, and emits a Fatal error.
There are three methods to ensure that this little cleanup code is always executed, no matter what : register_shutdown_function(), function __destruct() and try-finally.
If the built-in error handler is used null is returned. So, you can't reset the handler by giving it the returned value of the first call. Quite surprising, indeed.