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($value); } }
Passing a Generator that yields nothing would not call handle_empty()
, or handle_value()
, or alert the developer to the issue.
This RFC proposes adding a warning when calling count()
with a parameter that is a scalar, null, or an object that doesn't implement Countable.
Note that the sizeof alias is also affected. http://php.net/manual/en/function.sizeof.php
The call to count()
will still return 1 (or 0 for null) so backwards compatibility is maintained.
Environments that display warnings or convert them to more severe errors/exceptions would be affected, but this should just bring attention to a bug in the code.
PHP 7.2
Simple Yes/No vote that doesn't change the language itself so requires 50% + 1 votes to get 'accepted'.
Pull request to handle the change: https://github.com/php/php-src/pull/2185
Initial discussion that led to this RFC's creation: https://github.com/php/php-src/pull/1672
Discussion thread: http://externals.io/thread/350
Voting thread: http://externals.io/thread/409