PHP 7.2计数错误

问题描述 投票:0回答:2

警告:count():参数必须是一个数组或一个在...中实现Countable的对象

我在以下行中收到上述错误。

if (0 >= count($this->xprop))

有人能帮助我理解这个吗?我是PHP的新手。问题显然是$this->xprop不是阵列。在升级到PHP 7.2之前,这不是问题。我怎么能绕过这个?具有警告的代码是否仍在执行或是否会导致执行失败?

我试图在here上第二个回答没有运气。接受的答案对我来说是不可接受的,因为它更像是一个黑客攻击。

php wordpress
2个回答
3
投票

当尝试计算或获取未设置的变量的大小时,PHP 7.2会引发错误。在以前的版本中,作者会快速检查以查看变量是通过计算(或sizeof'ing)来设置的,并在未设置的变量上获得“0”。

解决方法是在计算之前检查它是否已设置:

if (isset($this->xprop) && count($this->xprop) == 0)

上面的示例实际上是负逻辑,并且是一种非常奇怪的方式,表明“如果此数组的大小为零或小于零”(这是不可能的)。因此,按照上面的示例,符合PHP 7.2的版本将使用empty:

if (empty($this->xprop))

...因为变量可以设置($xprop = array())但仍然是空的。

对不起,如果这有点不清楚;现在已经很晚了!

犯规


1
投票

问题是由于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 

因此,您应该验证变量是否为空

© www.soinside.com 2019 - 2024. All rights reserved.