====== PHP RFC: Counting of non-countable objects ====== * Version: 0.4 * Date: 2016-10-04 * Author: Craig Duncan * Proposed version: PHP 7.2 * Status: Implemented (in PHP 7.2) * 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($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 ===== * Yes * No ===== 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