PHP 7.2计数错误

时间:2018-08-21 23:22:48

标签: php wordpress

  

警告:count():参数必须是数组或对象,   在...中实现可计数...

我在下一行遇到上述错误。

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

有人可以帮助我理解吗?我对PHP相当陌生。问题显然是$this->xprop不是数组。在升级到PHP 7.2之前,这不是问题。我该如何解决?带有警告的代码仍在执行还是会导致执行失败?

我尝试遵循here上的第二个答案,但没有走运。可接受的答案对我来说是不可接受的,因为它更像是一种hack。

4 个答案:

答案 0 :(得分:3)

PHP 7.2在尝试计算未设置的变量或获取其大小时会引发错误。在以前的版本中,作者将通过快捷方式检查以查看变量是否已设置,方法是仅对其进行计数(或大小调整),然后对未设置的变量获取“ 0”。

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

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

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

if (empty($this->xprop))

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

很抱歉,如果不清楚。这里很晚了!

犯规

答案 1 :(得分:0)

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

所以您应该验证变量是否不为空

答案 2 :(得分:0)

如果您使用的是php7.3或更高版本,则可以在计数前使用is_countable

rfc/counting_non_countables

答案 3 :(得分:0)

有一些方法,但是我喜欢新的??操作符,因为它很短:

$null = null;

echo count($null);                           // Warning: count(): Parameter must be an array or an object that implements Countable
echo is_countable($null) ? count($null) : 0; // => 0
echo count((array)$null);                    // => 0
echo count($null ?? []);                     // => 0

相关问题