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:
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:
if (is_array($foo) || $foo instanceof Countable) { return count($foo); }
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:
if (is_array($foo) || $foo instanceof Countable) { // $foo is countable }
After:
if (is_countable($foo)) { // $foo is countable }
bool is_countable(mixed $var)
Verify that the content of a variable is an array or an object implementing Countable
var
The value to check
Returns TRUE if var is countable, FALSE otherwise
<?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)
None, as this is a new function only.
The next PHP 7.x, current version 7.3.
This RFC has no impact on SAPIs, existing extensions, Opcache, etc.
Is out of scope, but a new countable type could be cogitated in the future.
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.
The patch (including tests) for this proposal is available in GitHub Pull Request #3026.