rfc:array_count_handlers
Request for Comments: count_elements Vs. count()
- Version: 1.0
- Date: 2008-06-25
- Author: Etienne Kneuss colder@php.net
- Status: Implemented
Introduction
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:
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
Internal classes that define a count_elements handler will have to be fixed.
Changelog
rfc/array_count_handlers.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1