rfc:counting_non_countables

PHP RFC: Counting of non-countable objects

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($value); } }

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 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

Backward Incompatible Changes

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.

Proposed PHP Version(s)

PHP 7.2

Proposed Voting Choices

Simple Yes/No vote that doesn't change the language itself so requires 50% + 1 votes to get 'accepted'.

Vote

Implementation

Pull request to handle the change: https://github.com/php/php-src/pull/2185

References

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

rfc/counting_non_countables.txt · Last modified: by 127.0.0.1