Интерфейс Countable

(PHP 5 >= 5.1.0)

Введение

Классы, которые реализуют интерфейс Countable, могут быть использованы с функцией count().

Обзор интерфейсов

Countable {
/* Методы */
abstract public int count ( void )
}

Содержание

Коментарии

I just want to point out that your class has to actually implement the Countable interface, not just define a count method, to be able to use count($object) and get the expected results. I.e. the first example below won't work as expected, the second will. (The normal arrow function accessor ($object->count()) will work fine, but that's not the kewl part :) )

<?php
//Example One, BAD :(

class CountMe
{

    protected 
$_myCount 3;

    public function 
count()
    {
        return 
$this->_myCount;
    }

}

$countable = new CountMe();
echo 
count($countable); //result is "1", not as expected

//Example Two, GOOD :)

class CountMe implements Countable
{

    protected 
$_myCount 3;

    public function 
count()
    {
        return 
$this->_myCount;
    }

}

$countable = new CountMe();
echo 
count($countable); //result is "3" as expected
?>
2010-06-08 04:18:36
http://php5.kiev.ua/manual/ru/class.countable.html
Автор:
Note that arrays don't implement countable. Therefore you can't force a countable parameter for a function if you want it also to work with native arrays.
2011-01-17 08:10:43
http://php5.kiev.ua/manual/ru/class.countable.html
When using GMP/BC/Floating-Point Numbers to work with integers larger than PHP_INT_MAX, be aware that using the count() function will typecast the returned value to an integer.

<?php
class counter implements Countable {
    public function 
count() {
       
// Number of IPv6 addresses in a single /32 IPv6 allocation (2^96)
       
return "18446744073709551616"// assume generated/exported by big-int library(GMP/BC/etc.)
   
}
}

$obj = new counter();

echo 
$obj->count(); // prints string "18446744073709551616"
echo count($obj);    // prints int PHP_INT_MAX

// This is because of the typecasting
echo (int) "18446744073709551616"// prints int PHP_INT_MAX
?>

This will also cause problems for floating-point values.

<?php
class counter implements Countable {
    public function 
count() {
       
// Number of IPv6 addresses in a single /32 IPv6 allocation (2^96)
       
return 18446744073709551616;
    }
}

$obj = new counter();

echo 
$obj->count(); // prints float 18446744073709551616.000000
echo count($obj);    // prints int 0

// This is because of the typecasting
echo (int) 18446744073709551616// prints int 0
?>

This is only problematic when counting higher than PHP_INT_MAX.
2017-03-22 21:02:00
http://php5.kiev.ua/manual/ru/class.countable.html
Автор:
Unlike an array, an object of a class that implements Countable and has 0 elements is not considered empty:

class C implements Countable {
    public function count() {
        return 0;
    }
}

$a = [];
var_dump($a);
echo 'array is empty: '; var_dump(empty($a));

$c = new C;
var_dump($c);
echo 'Countable is empty: ' ; var_dump(empty($c));

Output:
array(0) {
}
array is empty: bool(true)
object(C)#1 (0) {
}
Countable is empty: bool(false)
2019-08-08 00:57:10
http://php5.kiev.ua/manual/ru/class.countable.html

    Поддержать сайт на родительском проекте КГБ