【问题标题】:PHP 7.2 count() function is not workingPHP 7.2 count() 函数不工作
【发布时间】:2018-06-03 14:16:52
【问题描述】:

我有一个工作的 php 应用程序,它在 php 7.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,那么逻辑应该可以工作。

所以我的问题是我已经在许多控制器上编写了这种逻辑,如果我必须逐个更改所有内容,它可能会成为噩梦。那么有什么方法可以让我编写一个全局函数来使计数工作,因为它在 php 旧版本中工作。什么是最简单的解决方法。

【问题讨论】:

  • 这是合乎逻辑的。首先返回对象。您应该使用 get() 方法来检索数组
  • 尝试做 var_dump($keytest) 并检查 $keytest 返回的类型是什么
  • 我可以这样做,但我需要更改所有代码我的问题是我们可以编写任何全局函数以使其可以工作我的应用程序非常大。
  • github.com/yiisoft/yii/issues/4167 php 对计数功能进行了更改我需要一个解决方案才能使其工作。
  • 这实际上是可证明的:3v4l.org/MFVQC -- 老实说非常有趣。我认为您可以编写自己的count() 函数来检查is_object() 并在这种情况下返回1,而不是抛出错误。在此检查之后,您执行旧的count() 调用。但我不知道是否可以覆盖语言本身的内置函数,因此您可能需要更新对该函数的所有引用。

标签: laravel count php-7.2


【解决方案1】:

尝试使用此功能代替“count”,您可以使用“empty”功能来检查内容。例如:而不是:

if ( count( $data ) ) 

用途:

if ( ! empty( $data ) )

【讨论】:

    【解决方案2】:

    可以使用禁用错误处理来处理此问题。解决方法请参考此链接:Laravel not compatiable with php 7.2

    在这里,我找到了解决您问题的方法,只需在控制器中编写此代码,或者如果您想让它适用于整个应用程序,请在 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
    }
    

    我知道这不是最好的解决方案,但它可能是一个很好的 hack。

    【讨论】:

    • 感谢这个解决方案,它有效,我的所有警告都消失了。
    • 当心!通过禁用错误报告来处理问题只是一种 FISHY WORKAROUND 而不是成为一种解决方案。请停止误导需要了解背后真正问题的新人。变通方法不是解决方案!正确的解决方案是使用编写良好的库/框架,在次要版本升级时不会爆炸,至少在合理的时间窗口内可以适应。将任意变量/类型传递给本机 count() 函数始终是一个设计问题,即使在 PHP 7 发布之前也是如此,但出色的维护者会忽略它,直到真正的警告到来。
    【解决方案3】:

    修改代码即可解决:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-05
      • 2018-10-11
      • 2015-09-22
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多