rfc:array_count_handlers

Differences

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

Link to this comparison view

Next revision
Previous revision
rfc:array_count_handlers [2008/06/25 16:21] – created colderrfc:array_count_handlers [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 3: Line 3:
   * Date: 2008-06-25   * Date: 2008-06-25
   * Author: Etienne Kneuss <colder@php.net>   * Author: Etienne Kneuss <colder@php.net>
-  * Status: Draft+  * Status: Implemented
  
  
Line 9: Line 9:
  
 An internal class has two ways to achieve a special feature: An internal class has two ways to achieve a special feature:
-1) implement the interface and define the method + 
-2) define the handler+   implement the interface and define the method 
 +   - define the handler
  
 for a class to be userland-friendly AND fast it must: for a class to be userland-friendly AND fast it must:
  
-1) define a zend_function pointer in the object for a specific method +   define a zend_function pointer in the object for a specific method 
-2) when creating the object, check if the method is overriden, if so, assign that pointer to the child method +   - when creating the object, check if the method is overriden, if so, assign that pointer to the child method 
-3) define a handler that will check that pointer, if defined: call it, if not, proceed without any method call+   - define a handler that will check that pointer, if defined: call it, if not, proceed without any method call
  
-==== Problem with count_elements ====+===== Proposal and Patch =====
  
 There are one problem with how the count_elements handler is defined/used: if an internal class extends Countable, it will call its count() method regardless of the handler pointer. There are one problem with how the count_elements handler is defined/used: if an internal class extends Countable, it will call its count() method regardless of the handler pointer.
  
 There are two main reasons why it's a problem: There are two main reasons why it's a problem:
-1) while it's userland friendly, it doesn't give the possibility of internals class to spare a method call if the method is not overriden. +   while it's userland friendly, it doesn't give the possibility of internals class to spare a method call if the method is not overriden. 
-2) it's not consistent with other handlers +   - it's not consistent with other handlers
- +
-===== Proposal and Patch =====+
  
-The patch consists of changing the order of the checks:+The patch consists of changing the order of the checks to fix that problem:
  
 http://patches.colder.ch/php-src/array-1.308.2.21.2.37.2.34.patch?markup http://patches.colder.ch/php-src/array-1.308.2.21.2.37.2.34.patch?markup
 +http://patches.colder.ch/php-src/array-1.454.patch?markup
  
 ===== Possible Breaks ===== ===== Possible Breaks =====
rfc/array_count_handlers.1214410883.txt.gz · Last modified: 2017/09/22 13:28 (external edit)