メンテナンス・トラブルシュート - PHP - PHP 7.2 - Parameter must be an array or...
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 で初期化するようにしたら。ワーニングがでなくなりました。
[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/
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 はカウントできます );
$response = $クラス->メソッド(引数); for ($j=0; $j<count($response); $j++) { ・・・ }
public function メソッド(引数) { $val = null; ・・・ return $val; }
public function メソッド(引数) : array { $val = array(); ・・・ return $val; }