PHP5からPHP7へのアップデートでcount関数の仕様が変わり、今までと同じ方法で使用するとエラーが発生するようになりました。
なぜ?エラーが発生するのか
仕様変更後のcount関数の引数には、配列、もしくはカウントができるオブジェクトでなければならないとなりました。
その事により、今までどおり、とりあえずcount関数に引数を渡して、カウントしてもらって、何もなければ0を返してもらおうと考えていると、エラーが発生してしまいます。
Warning: count(): Parameter must be an array or an object that implements Countable in … on line
うわ!こんなエラーが、、、まじかよ!!
解決方法
その解決方法をPHP7.3から追加されたis_countable関数を使って、以下の方法で解決できます。
$a_cnt = count($a); // 今まで
$b_cnt = is_countable($b)?count($b):0; // 新しく
たったこれだけ!とてもシンプルですので、是非、お試しください!
PHP7.3にバージョンアップしていない方は、以下の関数を作って上記方法をお試しください。
if (!function_exists('is_countable')) {
function is_countable($var) {
return (is_array($var) || $var instanceof Countable);
}
}
count関数そこら中に使っていて書き換えがめんどいなと思う方は、以下の関数を作って一括置換「 count(」→「 get_count(」で対応しちゃいましょう。
if (!function_exists('get_count')) {
function get_count($var) {
return ((is_array($var) || $var instanceof Countable)?count($var):0);
}
}
// さらば count($a);
get_count($a);
以上、お試しあれ!