> We have no error stack; not as such anyway. We are not talking about
> exceptions here, just simple error handlers. People define the current
> handler via set_error_handler() and that's all that's in effect until
> they restore_error_handler() or set another one. There is no propagation
> and I don't think there should be any.
>
The stack I'm referring to isn't an error stack.  I mean the error HANDLERS
stack which gets pushed onto when a second error handler is set via
set_error_handler(), or popped off of via restore_error_handler() (when more
than one have been defined).

Zend/zend_globals.h
struct _zend_executor_globals {
...
    zend_stack user_error_handlers_error_reporting;
    zend_ptr_stack user_error_handlers;
...
};

Beyond the new "return false;" syntax, this also has implications for
scenarios like the following:

<?php
  set_error_handler('fatal_error_handler', E_USER_ERROR);
  set_error_handler('non_fatal_error_handler', E_ALL & ~E_USER_ERROR);
?>

Based on documentation one might expect E_USER_ERRORs to go to
fatal_error_handler(), and all others (since the rest of the fatal errors go
to the internal handler anyway) to go to non_fatal_error_handler().   The
reality of course, is that E_USER_ERRORs don't go anywhere near
fatal_error_handler(), they just get shuffled off to the internal handler.

So not only does itterating through the handlers stack give us a chaining
effect through "return false;" it also has the side-effect of letting the
script define handlers on a per error code basis.

-Sara

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to