This is an old revision of the document!
PHP RFC: Counting of non-countable objects
- Version: 0.2
- Date: 2016-10-04
- Author: Craig Duncan git@duncanc.co.uk
- Proposed version: PHP 7.2
- Status: Under Discussion
- ML thread: http://externals.io/thread/350
Introduction
Calling count()
on a scalar or object that doesn't implement the Countable interface (http://php.net/manual/en/class.countable.php) returns 1.
There are no known use cases for this, and it can easily hide bugs, take the following example:
function handle_records(iterable $iterable) { if (count($iterable) === 0) { return handle_empty(); } foreach ($iterable as $value) { handle_value($val); } }
Passing a Generator that yields nothing would not call handle_empty()
, or handle_value()
, or alert the developer to the issue.
Proposal
This RFC proposes deprecating count with a parameter that is a scalar or an object that doesn't implement Countable.
Note that the sizeof alias is also affected. http://php.net/manual/en/function.sizeof.php
Backward Incompatible Changes
None, deprecating features does not break BC.
Proposed PHP Version(s)
PHP 7.2
Open Issues
- At the moment
count(null)
returns0
, should this be deprecated too
Proposed Voting Choices
Simple Yes/No vote that doesn't change the language itself so requires 50% + 1 votes to get 'accepted'.
Patches and Tests
Patch to handle the change: https://github.com/duncan3dc/php-src/commit/d253a1680361e63d070b324cf5a33493120f8050
Example tests: https://github.com/duncan3dc/php-src/commit/46a4f0061956f27ec195e3d497005a0a8c00ceb6
References
Initial discussion that led to this RFC's creation: https://github.com/php/php-src/pull/1672