警告:count():参数必须是数组或对象, 在...中实现可计数...
我在下一行遇到上述错误。
if (0 >= count($this->xprop))
有人可以帮助我理解吗?我对PHP相当陌生。问题显然是$this->xprop
不是数组。在升级到PHP 7.2之前,这不是问题。我该如何解决?带有警告的代码仍在执行还是会导致执行失败?
我尝试遵循here上的第二个答案,但没有走运。可接受的答案对我来说是不可接受的,因为它更像是一种hack。
答案 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
答案 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