====== Request for Comments: count_elements Vs. count() ====== * Version: 1.0 * Date: 2008-06-25 * Author: Etienne Kneuss * 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 =====