This is an old revision of the document!
Request for Comments: count_elements Vs. count()
- Version: 1.0
- Date: 2008-06-25
- Author: Etienne Kneuss colder@php.net
- Status: Draft
Introduction
An internal class has two ways to achieve a special feature: 1) implement the interface and define the method 2) define the handler
for a class to be userland-friendly AND fast it must:
1) 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 3) define a handler that will check that pointer, if defined: call it, if not, proceed without any method call
Problem with count_elements
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: 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. 2) it's not consistent with other handlers
Proposal and Patch
The patch consists of changing the order of the checks:
http://patches.colder.ch/php-src/array-1.308.2.21.2.37.2.34.patch?markup
Possible Breaks
Internal classes that define a count_elements handler will have to be fixed.