# RFC: is_countable function

- Status: Implemented (PHP 7.3)
- Authors: Gabriel Caruso (carusogabriel34@gmail.com)
- Date: 2018-01-21
- Version: 1.0
- Original: https://wiki.php.net/rfc/is-countable
- Page: https://externals.io/rfc/is-countable
- 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

### is-countable function (closed)

Yes: 25 · No: 0

Voters: aeoris (Yes), ashnazg (Yes), colinodell (Yes), cpriest (Yes), danack (Yes), diegopires (Yes), emir (Yes), galvao (Yes), guilhermeblanco (Yes), hywan (Yes), kalle (Yes), kelunik (Yes), kguest (Yes), kinncj (Yes), lcobucci (Yes), levim (Yes), lex (Yes), marcio (Yes), ocramius (Yes), pmjones (Yes), pmmaga (Yes), pollita (Yes), salathe (Yes), svpernova09 (Yes), yunosh (Yes)

## Discussions on the mailing list

- [\[RFC\] is_countable](https://externals.io/message/101648.md) — started on 2018-01-21, 7 messages
- [\[VOTE\] is_countable](https://externals.io/message/101934.md) — started on 2018-02-26, 1 messages

---

## Introduction

In PHP 7.2, a Warning was added while trying to `count` uncountable things. After that, everyone was forced to search and change their code, to avoid it. Usually, the following piece of code became standard:

```php
if (is_array($foo) || $foo instanceof Countable) {
    // $foo is countable
}
```

This condition, to check if a variable “is countable”, is also very common in methods that return the count of the elements:

```php
if (is_array($foo) || $foo instanceof Countable) {
    return count($foo);
}
```

## Proposal

This RFC proposes a new type function, that returns true if the given value is an `array` type or an instance of the `Countable` interface.

Before:

```php
if (is_array($foo) || $foo instanceof Countable) {
    // $foo is countable
}
```

After:

```php
if (is_countable($foo)) {
    // $foo is countable
}
```

# Documentation

### Description

```
bool is_countable(mixed $var)
```

Verify that the content of a variable is an *array* or an object implementing *Countable*

### Parameters

**var**

The value to check

### Return Values

Returns **TRUE** if var is countable, **FALSE** otherwise

### Examples

#### Example #1: is\_countable

```php
<?php
var_dump(is_countable([1, 2, 3])); // bool(true)
var_dump(is_countable(new ArrayIterator(['foo', 'bar', 'baz']))); // bool(true)
var_dump(is_countable(new ArrayIterator())); // bool(true)
var_dump(is_countable(new stdClass())); // bool(false)
```

#### Example #2: is\_countable with conditions

```php
<?php
$foo = ['', []];
 
if (is_countable($foo)) {
    var_dump(count($foo)); // int(2)
}
```

## Backward Incompatible Changes

None, as this is a new function only.

## Proposed PHP Version

The next PHP 7.x, current version 7.3.

## RFC Impact

This RFC has no impact on SAPIs, existing extensions, Opcache, etc.

## Future Scope

Is out of scope, but a new *countable* type could be cogitated in the future.

## Proposed Voting Choices

Since this is not a PHP language changed, a 50% + 1 majority is required.

Voting begins **2018-02-26 17:00 UTC** and ends **2018-03-02 17:00 UTC**.

**Vote: is-countable function** — Yes: 25 · No: 0 (closed)

## Proposal and Patch

The patch (including tests) for this proposal is available in [GitHub Pull Request #3026](https://github.com/php/php-src/pull/3026).

## References

[https://wiki.php.net/rfc/counting\_non\_countables](https://externals.io/rfc/counting_non_countables)
<https://externals.io/message/101648>
