In PHP, quando si ha la necessità di contare il numero di elementi di un array o di un qualsiasi oggetto che implementa l'interfaccia Countable
possiamo utilizzare la funzione count()
.
<?php
class Collection implements Countable
{
private $collection = [];
public function __construct(array $elements = [])
{
$this->collection = $elements;
}
public function count()
{
return count($this->collection);
}
}
$collection = new Collection([1, 2, 3]);
echo count($collection); //stamperà 3
Non sempre però sappiamo a priori il tipo di dato che passeremo alla funzione count()
e questo potrebbe sollevare un warning a runtime.
I limiti fino a PHP 7.2, prima di is_countable
Fino alla versione 7.2 di PHP per ovviare a questo problema potevamo aggiungere un check come il seguente:
if (is_array($collection) || $collection instanceof Countable) {
//la collection è countable
echo count($collection); //stamperà 3
}
is_countable()
Dalla versione 7.3 viene introdotta la funzione is_countable()
che verifica, come ci suggerisce il nome, se un tipo di dato è countable oppure no. Il codice precedente, quindi. diventerà:
if (is_countable($collection)) {
//la collection è countable
echo count($collection); //stamperà 3
}
Vediamo anche alcuni esempi di utilizzo provenienti dalla RFC:
<?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)