19

你知道为什么<?= count(false) ?>退货1吗?

4

4 回答 4

26

这是指定的行为:

如果 var 不是数组或实现了 Countable 接口的对象,则返回 1。

根据http://php.net/manual/en/function.count.php

于 2013-03-10T20:59:44.957 回答
10

因为false也是一个值,如果 count() 没有得到数组而是一个有效的变量,它返回true的是1.

$result = count(null);
// $result == 0

$result = count(false);
// $result == 1
于 2013-03-10T20:59:33.630 回答
3

记住这一点的好方法:

  • count(false) 与以下基本相同:
  • 计数(“一个布尔值”),因此结果是“一个”布尔值。
于 2016-04-06T08:40:21.730 回答
2

在我看来,PHP 正在阻止人们使用它count()来确定元素是数组还是对象。他们为此 ( is_array(), is_object()) 提供了专用函数,并且可能很容易天真地使用count()和检查false条件来确定数组或对象。相反,PHP 使非对象、非数组返回1(这是真实的),因此不能以这种方式天真地使用此方法(因为0对于空数组/对象是有效的、虚假的结果)。

这可能是在您描述的情况下选择函数返回的值的原因。

于 2013-12-28T20:19:38.027 回答