児童書のおすすめ本59選

PHP7.2以上でWarning: count(): Parameter must be…が出るときの対処

PHPのロゴ

わたしの場合は、レンタルサーバのPHPバージョンを7.2にして、自分のワードプレスサイトを見たらこんな感じになっていた。

PHP7.2以上でWarning: count(): Parameter must be...が出るときの対処

エラーメッセージ内容

Warning: count(): Parameter must be an array or an object that implements Countable in /home/サイト名/public_html/wp-content/plugins/wordpress-ping-optimizer/cbnet-ping-optimizer.php on line 533

PHPのcount関数でWarningが出力されている。
PHPの警告表示っていつみてもいやな気分になりますね。サイトのトップ部分がこんな感じだとアクセスした人がすぐ移動しちゃうんじゃないかと…

エラーメッセージから得られる情報

エラー内容:count関数の引数が配列型か数値である必要がある

プラグイン名wordpress-ping-optimizer
ファイル名cbnet-ping-optimizer.php
行数533

対処

実際にFTPソフトでワードプレスをインストールしたディレクトリにアクセスし、

wp-content >plugins >wordpress-ping-optimizer

を開くとエラーの出ているファイルcbnet-ping-optimizer.phpが見つかるので修正するためダウンロード。
PHP7.2以上でWarning: count(): Parameter must be...が出るときの対処

実際にエラーの出ていた533行目付近のソースコードはこちら。

修正前のコード

// handle null before count
if (is_null($this->cbnetpo_future_pings))
	$pingCount=0;
else
	$pingCount=count($this->cbnetpo_future_pings);

533行目は、else文の処理。ここで警告が出ている。
count関数の引数$this->cbnetpo_future_pingsが配列か数値ではないということになる。

530行目のif文でis_nullを使って$this->cbnetpo_future_pingsの中身がNULLだったときは、$pingCount = 0としていることから「空だったら」という判定をしたいようだ。
count関数は、配列の要素数を返す関数なので配列でなければ、$pingCount = 0とすれば良いので、修正内容は以下のようになる。

修正後のコード例1

if ( !is_array($this->cbnetpo_future_pings) )
	$pingCount=0;
else
	$pingCount=count($this->cbnetpo_future_pings);

念のため、is_nullより広範囲な「空だったら」の判定emptyも加えて

修正後のコード例2(推奨)

if ( !is_array($this->cbnetpo_future_pings) || empty($this->cbnetpo_future_pings) )
	$pingCount=0;
else
	$pingCount=count($this->cbnetpo_future_pings);

としてもいい。

修正後は、元の場所にアップロードする。
PHP7.2以上でWarning: count(): Parameter must be...が出るときの対処

補足
PHP7.2以降count関数の引数にCountable(数えられる)ものを指定しないとWarningが出るとのこと。