Laravel PHP 7.2 count()函数不起作用

Laravel PHP 7.2 count()函数不起作用,laravel,count,php-7.2,Laravel,Count,Php 7.2,我有一个正常工作的php应用程序,它在PHP7.0版本上运行良好。但是当我将php版本升级到7.2时。我得到这个错误: count(): Parameter must be an array or an object that implements Countable 我将数据与计数函数进行比较的代码出现错误。例如,这是我的代码: $keytest = KeyUser::where('key', '=', $key)->first(); if (count($keytest) == 1

我有一个正常工作的php应用程序,它在PHP7.0版本上运行良好。但是当我将php版本升级到7.2时。我得到这个错误:

count(): Parameter must be an array or an object that implements Countable
我将数据与计数函数进行比较的代码出现错误。例如,这是我的代码:

$keytest = KeyUser::where('key', '=', $key)->first();
 if (count($keytest) == 1) {
   //logic ... 
  }
我使用的是laravel,在这里我运行一个查询并计算它,如果它等于1,那么逻辑应该工作


所以我的问题是,我已经在许多控制器上编写了这种逻辑,如果我必须一个接一个地改变一切,它可能会成为一场噩梦。所以,有没有什么方法可以让我编写一个全局函数,让count像在php旧版本中一样工作。最简单的解决方法是什么

可以使用禁用错误处理来处理此问题。有关解决方案,请参阅此链接:

在这里,我找到了解决您问题的方法,只需在控制器中编写此代码,或者如果您想使其在整个应用程序中正常工作,请在route.php中编写此代码:

 //app/Http/routes.php

 if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
// Ignores notices and reports all other kinds... and warnings
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
// error_reporting(E_ALL ^ E_WARNING); // Maybe this is enough
}

我知道这不是最好的解决方案,但它可以是一个很好的黑客

当您更改代码时,问题就解决了:

$keytest = KeyUser::where('key', '=', $key)->first();
if ($keytest) {
   //logic ... 
}

尝试使用此函数而不是“计数”,您可以使用“清空””函数检查内容。例如:代替:

if ( count( $data ) ) 
使用:


这是合乎逻辑的。首先返回对象。您应该使用get()方法来检索一个数组,并执行var_dump($keytest)并检查$keytest返回的类型。我可以这样做,但我需要更改所有代码。我的问题是,我们是否可以编写任何全局函数以使其可行?我的应用程序非常大。php对count函数进行了更改,我需要一个解决方案使其工作。它实际上是可证明的:--说实话,这很有趣。我认为您可以编写自己的
count()
函数来检查
is\u object()
并在本例中返回
1
,而不抛出错误。检查之后,执行旧的
count()
调用。但我不知道是否有可能覆盖语言本身的内置函数,因此您可能需要更新对该函数的所有引用。感谢此解决方案,它起了作用。我的所有警告都消失了。小心!通过禁用错误报告来处理问题只是一个可疑的解决方法,而不是一个解决方案。请停止误导需要了解背后真正问题的新来者。变通办法不是解决方案!正确的解决方案是使用编写良好的库/框架,这些库/框架在小版本升级时不会爆炸,至少在合理的时间窗口内可以适应。将任意变量/类型传递给本机的
count()
函数始终是一个设计问题,即使在PHP7发布之前也是如此,但是优秀的维护人员在真正的警告到来之前一直忽略了它。
if ( ! empty( $data ) )