# RFC: Counting of non-countable objects

- Status: Implemented (PHP 7.2)
- Authors: Craig Duncan php@duncanc.co.uk
- Date: 2016-10-04
- Version: 0.4
- Original: https://wiki.php.net/rfc/counting_non_countables
- Page: https://externals.io/rfc/counting_non_countables
- More for agents: search with https://externals.io/search.md?q={query} · RFCs at https://externals.io/rfc.md · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

## Votes

### Counting of non-countable objects (closed)

Yes: 31 · No: 0

Voters: ajf (Yes), alan_k (Yes), bishop (Yes), bwoebi (Yes), cmb (Yes), colinodell (Yes), danack (Yes), davey (Yes), galvao (Yes), guilhermeblanco (Yes), hywan (Yes), jhdxr (Yes), kguest (Yes), lcobucci (Yes), leigh (Yes), marcio (Yes), mariano (Yes), mbeccati (Yes), mfonda (Yes), mike (Yes), nikic (Yes), ocramius (Yes), omars (Yes), pierrick (Yes), rasmus (Yes), sammyk (Yes), santiagolizardo (Yes), tpunt (Yes), trowski (Yes), yohgaki (Yes), zimt (Yes)

## Discussions on the mailing list

- [\[RFC\] Counting of non-countable objects](https://externals.io/message/96211.md) — started on 2016-10-04, 13 messages
- [\[RFC\] \[VOTE\] Counting of non-countable objects](https://externals.io/message/96541.md) — started on 2016-10-21, 5 messages
- [Countable Type Hint](https://externals.io/message/96948.md) — started on 2016-11-17, 15 messages

---

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

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

**Vote: Counting of non-countable objects** — Yes: 31 · No: 0 (closed)

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