警告:count():参数必须是一个数组或一个在...中实现Countable的对象
我在以下行中收到上述错误。
if (0 >= count($this->xprop))
有人能帮助我理解这个吗?我是PHP的新手。问题显然是$this->xprop
不是阵列。在升级到PHP 7.2之前,这不是问题。我怎么能绕过这个?具有警告的代码是否仍在执行或是否会导致执行失败?
我试图在here上第二个回答没有运气。接受的答案对我来说是不可接受的,因为它更像是一个黑客攻击。
当尝试计算或获取未设置的变量的大小时,PHP 7.2会引发错误。在以前的版本中,作者会快速检查以查看变量是通过计算(或sizeof'ing)来设置的,并在未设置的变量上获得“0”。
解决方法是在计算之前检查它是否已设置:
if (isset($this->xprop) && count($this->xprop) == 0)
上面的示例实际上是负逻辑,并且是一种非常奇怪的方式,表明“如果此数组的大小为零或小于零”(这是不可能的)。因此,按照上面的示例,符合PHP 7.2的版本将使用empty:
if (empty($this->xprop))
...因为变量可以设置($xprop = array()
)但仍然是空的。
对不起,如果这有点不清楚;现在已经很晚了!
犯规
问题是由于PHP版本引起的。
在PHP 7.2中,count()方法不支持null作为参数。
示例:
在PHP 5.6.x中:
echo count(null); // this show 0
在PHP 7.2.x中:
echo count(null); // count(): Parameter must be an array or an object that implements Countable
因此,您应该验证变量是否为空