Request for Comments: count_elements Vs. count()
- Version: 1.0
- Date: 2008-06-25
- Author: Etienne Kneuss email@example.com
- Status: Implemented
An internal class has two ways to achieve a special feature:
- implement the interface and define the method
- define the handler
for a class to be userland-friendly AND fast it must:
- define a zend_function pointer in the object for a specific method
- when creating the object, check if the method is overriden, if so, assign that pointer to the child method
- define a handler that will check that pointer, if defined: call it, if not, proceed without any method call
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 two main reasons why it's a problem:
- 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.
- it's not consistent with other handlers
The patch consists of changing the order of the checks to fix that problem:
Internal classes that define a count_elements handler will have to be fixed.