首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP nightly:参数必须是数组或实现Countable的对象

PHP nightly:参数必须是数组或实现Countable的对象
EN

Stack Overflow用户
提问于 2016-12-05 22:46:42
回答 2查看 3.9K关注 0票数 4

我看到a PHP webapp中的UT failures每晚都在Travis CI中与PHP运行:

代码语言:javascript
复制
$ php --version
PHP 7.2.0-dev (cli) (built: Dec  4 2016 22:49:34) ( ZTS )

这是失败的测试用例:

代码语言:javascript
复制
$payments = PaymentsHelper::refunds('DE0000000001', '2016-04-01', '2017-04-01');

$this->assertNotNull($payments);
$this->assertEquals(0, count($payments));

测试失败

代码语言:javascript
复制
1) PaymentsHelperTest::test_refunds_within_lifetime
count(): Parameter must be an array or an object that implements Countable

目前正在测试的代码包含调试日志,显示refunds()的返回值确实是一个数组:

代码语言:javascript
复制
Array
(
    [0] => Payment Object
        (
...
        )
)

我是不是每晚都会碰到PHP中的bug?

EN

回答 2

Stack Overflow用户

发布于 2016-12-06 00:26:50

我进一步调试了这个问题,并意识到错误发生在代码的早期,依赖项返回NULL,而代码调用count(NULL)

代码语言:javascript
复制
$bonds = $bond_factory->find_all(/* ... */);
if (count($bonds) > 0)
{
  //...
}

我决定使用null检查来保护对count()的调用:

代码语言:javascript
复制
$bonds = $bond_factory->find_all(/* ... */);
if (!is_null($bonds) && count($bonds) > 0)
{
  //...
}

PHP 7.2.0-dev现在对它的输入显然不那么宽容了。

票数 3
EN

Stack Overflow用户

发布于 2017-12-27 00:59:45

传递警告的另一种方式..

代码语言:javascript
复制
if ( count( $bonds ? : [] ) ) { .... }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40976906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档