计算数组中的单元数目或对象中的属性个数。
int count (mixed $array_or_countable [, int $mode = COUNT_NORMAL ])
/*null 输出0*/
echo count(null) . '<br>'; //0
/*字符串 输出1*/
echo count('null') . '<br>'; //1
echo count('abc') . '<br>'; //1
/*数字 输出1*/
echo count(1) . '<br>'; //1
/*普通数组*/
$arr = [1, 2, 3, 4];
echo count($arr) . '<br>'; //4
/*不递归输出*/
$arr = [1, 2, 3, 4, [5, 6]];
echo count($arr) . '<br>'; //5
echo count($arr, 0) . '<br>'; //5
echo count($arr, COUNT_NORMAL) . '<br>'; //5
/*递归输出*/
echo count($arr, 1) . '<br>'; //7
echo count($arr, COUNT_RECURSIVE) . '<br>'; //7
/*普通对象 如果不转换成数组,永远输出1*/
class User
{
private $name;
private $address;
}
$user = new User();
echo count($user) . '<br>'; //1
print_r((array) $user); //Array ( [Username] => [Useraddress] => )
echo count((array) $user) . '<br>'; //2
/*array like object 输出count方法返回值*/
class User1 extends ArrayObject
{
public function count() {
return 4;
}
}
$user1 = new User1();
echo count($user1) . '<br>'; //4
/*Countable 输出count方法返回值*/
class User2 implements Countable
{
public function count() {
return 5;
}
}
$user2 = new User2();
echo count($user2) . '<br>'; //5
总结
进入switch语句检测参数类型:
- 如果是NULL,直接返回0
- 如果是数组,调用php_count_recursive函数机选数组元素个数
- 如果是对象,先检查是否为数组对象(array like object),如果是,则计算数组对象的数量
- 否则,如果对象实现了Countable接口,则调用Countable的count方法
- 最后,其他类型比如整型或字符串,都返回1。