4. メンテナンス・トラブルシュート - PHP - PHP 7.2 - Parameter must be an array or...

 
4.1 概要
4.2 調査
4.3 対応

4.1 概要

 ウェブサーバのエラーログに

[Mon Jul 09 08:24:37.142003 2018] [php7:warn] [pid 13993] [client 126.245.12.181:18591] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /パス/ソースファイル名.php on line 210, referer: http://URI/
 というのが出力されます。

4.2 調査

 これは「PHP マニュアル - 付録 - PHP 7.0.x から PHP 7.1.x への移行 - 下位互換性のない変更点」に記載があります。
countabe ではない型をカウントしたときの警告

countable ではない型に対して count() (およびそのエイリアスである sizeof()) を使ったときに E_WARNING が発生するようになりました。
 以上引用。  例題として以下のような記述は警告が出力されるとのこと。

<?php

var_dump(
    count(null), 			// NULL はカウントできません
    count(1), 				// integer はカウントできません
    count('abc'), 			// string はカウントできません
    count(new stdclass), 	// Countable インターフェイスを実装していないオブジェクトはカウントできません
    count([1,2]) 			// array はカウントできます
);

4.3 対応

 実際のソースは

            $response = $クラス->メソッド(引数);

           	for ($j=0; $j<count($response); $j++)
           	{
           		・・・
           	}
 とこんな感じになっております。  これはメソッド側の

public function メソッド(引数)
{
   	$val = null;

   	・・・

   	return $val;
}
 を

public function メソッド(引数) : array
{
   	$val = array();

   	・・・

   	return $val;
}
 と2か所変更しました。  PHP 7.2 から有効になった、戻り値の型定義と戻り値を初期化する際に array で初期化するようにしたら。ワーニングがでなくなりました。