rfc:improved_error_callback_mechanism

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:improved_error_callback_mechanism [2015/03/16 09:42] oliviergarciarfc:improved_error_callback_mechanism [2017/02/03 06:41] krakjoe
Line 1: Line 1:
 ====== PHP RFC: Improved Error Callback Mechanism ====== ====== PHP RFC: Improved Error Callback Mechanism ======
-  * Version: 0.1+  * Version: 0.4
   * Create Date: 2015-03-13   * Create Date: 2015-03-13
-  * Modify Date: 2015-03-13+  * Modify Date: 2015-06-10
   * Author: Patrick Allaert <patrick@catchy.io>, Olivier Garcia <olivier@catchy.io>   * Author: Patrick Allaert <patrick@catchy.io>, Olivier Garcia <olivier@catchy.io>
-  * Status: Under discussion+  * Status: Abandoned
   * First Published at: http://wiki.php.net/rfc/improved_error_callback_mechanism   * First Published at: http://wiki.php.net/rfc/improved_error_callback_mechanism
  
Line 22: Line 22:
 ===== Proposal ===== ===== Proposal =====
  
-We propose to split ''php_error_cb'' into multiple hookable parts corresponding to the following behaviours: +We propose to split ''php_error_cb'' into multiple hookable categories corresponding to the following behaviours: 
-  - Display the error (**display** part+  - Display the error (**display** category
-  - Log the error (**log** part+  - Log the error (**log** category
-  - Do additional processing if needed (**process** part), empty by default +  - Do additional processing if needed (**process** category), empty by default 
-  - Check if the error is recoverable and bail out if needed (**bailout** part)+  - Check if the error is recoverable and bail out if needed (**bailout** category)
  
-We believe that there is no interesting use case for hooking the other existing parts of ''php_error_cb''.+We believe that there is no interesting use case for hooking the other existing categories of ''php_error_cb''.
  
-An extension that want to **extend** one of the part can do it so with:+An extension that want to extend one of the category can do it so by **appending** a hook:
 <code c> <code c>
-    PHP_ERROR_HOOK_API my_logging_hook(PHP_ERROR_HOOK_ARGS{+    ZEND_ERROR_CB_API my_logging_hook(ZEND_ERROR_CB_HOOK_ARGS)
         /* Do some logging with error line number, filename, message, ... */         /* Do some logging with error line number, filename, message, ... */
     }     }
  
-    zend_add_error_hook(E_HOOK_LOG, my_logging_hook);+    zend_append_error_hook(E_HOOK_LOG, my_logging_hook);
 </code> </code>
  
-An extension that want to **clear** one of the part can do it so with:+Each hook must return either ''SUCCESS'' or ''FAILURE'' : if ''FAILURE'' is returned, the next hooks of current category won't be called. 
 + 
 +**Prepending** is also possible in the case one want to execute a hook before the others of the same category: 
 +<code c> 
 +    zend_prepend_error_hook(E_HOOK_LOG, my_logging_hook); 
 +</code> 
 + 
 +An extension that want to **clear** all hooks from a specific category can do it so with:
 <code c> <code c>
     zend_clear_error_hook(E_HOOK_DISPLAY);     zend_clear_error_hook(E_HOOK_DISPLAY);
 </code> </code>
  
 +''zend_append_error_hook'', ''zend_prepend_error_hook'' and ''zend_clear_error_hook'' will operate on one of the internal linked lists of error hooks. There will be one linked list for each category, referred to with one of the constants: ''E_HOOK_DISPLAY'', ''E_HOOK_LOG'', ''E_HOOK_PROCESS'' or ''E_HOOK_BAILOUT''. Those linked lists will, by default, contain the original implementation.
  
-''zend_add_error_hook'' and ''zend_clear_error_hook'' will operate on one of the internal linked lists of error hooks. There will be one linked list for each parts, referred to with one of the constants: ''E_HOOK_DISPLAY'', ''E_HOOK_LOG'', ''E_HOOK_PROCESS'' or ''E_HOOK_BAILOUT''. Those linked lists will, by default, contain the original implementation.+The modification of hook lists must be done during the MINIT phase.
  
 ==== Overview of the improved ''php_error_cb'' ==== ==== Overview of the improved ''php_error_cb'' ====
Line 63: Line 71:
         /** calling E_HOOK_LOG hooks here **/         /** calling E_HOOK_LOG hooks here **/
         /** calling E_HOOK_DISPLAY hooks here **/         /** calling E_HOOK_DISPLAY hooks here **/
 +        /** calling E_HOOK_PROCESS hooks here **/
     }     }
- 
-    /** calling E_HOOK_PROCESS hooks here **/ 
  
     /** calling E_HOOK_BAILOUT hooks here **/     /** calling E_HOOK_BAILOUT hooks here **/
Line 74: Line 81:
  
 ==== Open discussions point ==== ==== Open discussions point ====
-Should the implementation contain pre and post hooks that would be empty by default? It would enable extensions to do some treatment at the early/lately phase.+Should the implementation also contain pre and post hook lists that would be empty by default? It would enable extensions to do some treatment at the early/lately phase.
  
 ===== Backward incompatible changes ===== ===== Backward incompatible changes =====
Line 90: Line 97:
 None at the moment. None at the moment.
  
-===== Proposed Voting Choices  ===== +===== Patches and tests ===== 
-This RFC does not suggest a language change, so a 50%+1 majority is required for passage. +The patch has been created by Patrick Allaert and Olivier Garcia.
- +
-<doodle title="improved_error_callback_mechanism" auth="levim" voteType="single" closed="false"> +
-   * Yes +
-   * No +
-</doodle>+
  
-===== Patches and tests ===== +PR available at: https://github.com/php/php-src/pull/1247
-The patch is under creation by Patrick Allaert and Olivier Garcia+
  
 ===== Implementation ===== ===== Implementation =====
 After the project is implemented, this section should contain: After the project is implemented, this section should contain:
- the version(s) it was merged to +  * the version(s) it was merged to 
- a link to the git commit(s)+  a link to the git commit(s)
  
 ===== References ===== ===== References =====
Line 114: Line 115:
  
 ==== User land changes ==== ==== User land changes ====
-It may be interesting to provide changes in the userland so that a user function can be registered as a part of one of those hooks. However, that would complicate this RFC and we consider this as out of the actual scope while considering it as a future enhancement.+It may be interesting to provide changes in the userland so that a user function can be registered as a category of one of those hooks. However, that would complicate this RFC and we consider this as out of the actual scope while considering it as a future enhancement. 
 + 
 +===== Proposed Voting Choices ===== 
 +Proposed voting choices are Yes (vote in favor) or No (reject the proposed change) 
 + 
 +As this is not a language-changing RFC, a majority of 50%+1 is required to approve this RFC. 
 + 
 +===== Vote ====== 
 +<doodle title="improved_error_callback" auth="ogarcia" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle> 
 + 
 +===== Versions =====
  
 +  * 0.1: Initial RFC (2015-03-13)
 +  * 0.2: Changing API slightly + possibility to prepend hooks as suggested by Derick + fixing E_HOOK_PROCESS hooks placement (2015-04-07)
 +  * 0.3: Added hook's SUCCESS/FAILURE behaviour (2015-04-23)
 +  * 0.4: Closing vote for version 7.0 ("No go" because of feature freeze)
rfc/improved_error_callback_mechanism.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1