メンテナンス・トラブルシュート - PHP - PHP 7.2 - Parameter must be an array or...
- 1. 概要
- 2. 調査
- 3. 対応
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/
というのが出力されます。
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 はカウントできます
);
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 で初期化するようにしたら。ワーニングがでなくなりました。
|
|