最近PHPのバージョンアップの作業でよく見かけるのが、count関数を使ってカウントできない物を引数にしている場合に出る
Warning: count(): Parameter must be an array or an object that implements Countable in~~~~~~
というWarningです。
これはPHPのバージョン7.2以降で発生する現象で、7.1から7.4に上げようとしているのでこれにひっかかってしまいました。
よくこのWarningにひっかかるパターンとしてはDBからデータを取得し、データが存在している時は配列で入っているので問題ないのですが、条件に該当しなかったとかでデータが無かった場合です。
$dataという変数にこれが入るとイメージしてもらって、データがあれば配列がはいっている、なければnullが入ってしまう変数をカウントしてるってパターンですね。
簡単なソースを書くと
"SELECT * FROM `ITEM_DATA` WHERE id = 1"
みたいなSQLでデータを取得し、それが$dataに入るようなソースがあったとして、それをカウントしてしまう場合ですね。
$count_data = count ( $data );
こんな感じです。
今まではこれで問題なかったのですが、
配列であればcount()するという処理に変えればOKなので、
$count_data = count ( $data );
↓
( is_array ($data) ) ? $count_data = count ( $data ): $count_data = 0;
って感じで配列ならカウントして、配列じゃなければintの0を入れるという処理に書き換えています。
三項演算子で処理するのがいいかと思い公式は以下です。
式A ? trueの時の処理 : falseの時の処理;
式Aの後に ? を入れ式Aがtrueなら:より前の処理をして、falseなら:より後ろの処理をします。1行でかけるif文みたいなものです。
count関数を使ってる箇所が恐ろしい量あるので、気が滅入ってきました・・・。