2016-12-05 47 views
4

我看到在a PHP webappUT failures特拉維斯CI運行鍼對PHP夜間數組或對象:PHP夜間:參數必須是實現可數

$ php --version 
PHP 7.2.0-dev (cli) (built: Dec 4 2016 22:49:34) (ZTS) 

這是失敗的測試案例:

$payments = PaymentsHelper::refunds('DE0000000001', '2016-04-01', '2017-04-01'); 

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

測試失敗

1) PaymentsHelperTest::test_refunds_within_lifetime 
count(): Parameter must be an array or an object that implements Countable 

代碼正在此刻CON測試顯示的refunds()返回值含有雜質的調試日誌記錄確實是一個數組:

Array 
(
    [0] => Payment Object 
     (
... 
     ) 
) 

上午我打一個bug在PHP每晚?

+0

可能 - 但它不應該是令人驚訝的是,PHP滅弧未發佈的版本不是生產做好準備。即使如此,對於*你的類沒有足夠的證據來指責PHP是錯誤的。我首先通過調查你在最後一次提交中破壞你的代碼的可能性。 – HPierce

+0

我進一步調試了這個問題,並意識到錯誤發生在代碼中,其中一個依賴項返回一個'NULL',代碼調用'count(NULL)'。顯然,PHP 7.2.0-dev對其輸入的支持不夠寬容。 – claudiopro

回答

3

我調試的問題,進一步,實現了錯誤代碼,其中一個依賴返回NULL更早發生,代碼調用count(NULL)

$bonds = $bond_factory->find_all(/* ... */); 
if (count($bonds) > 0) 
{ 
    //... 
} 

我解決了與空校驗守着調用count()

$bonds = $bond_factory->find_all(/* ... */); 
if (!is_null($bonds) && count($bonds) > 0) 
{ 
    //... 
} 

PHP 7.2.0-dev顯然對其輸入的寬容度較低。

0

另一種方式爲通過警告..

if (count($bonds ? : [])) { .... } 
相關問題