2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

php7.2以上にあげたらcount()でエラーになった

2
Posted at

phpのバージョンを上げる機会があったのですが、バージョンアップ後にエラーが発生するようになりました。

Parameter must be an array or an object that implements Countable

調べてみると、

php7.2からの変更点で
countableではない型に対してcount()を使用した場合にE_WARNINGが発生するようになりました。

参照 :countable ではない型をカウントしたときの警告

<?php

var_dump(
    count(null), // NULL はカウントできません
    count(1), // integer はカウントできません
    count('abc'), // string はカウントできません
    count(new stdclass), // Countable インターフェイスを実装していないオブジェクトはカウントできません
    count([1,2]) // array はカウントできます
);

Countableではないとは、Countableインタフェースを継承していないクラスのことです。
今まで、オブジェクトの存在有無チェックとしてcountを使用していたりしているとphpが吸収して動いていただけなのですが、
カウントを意図的に明記したい時以外で変数の有無チェックのような場合は
empty()やisset()を使用すべきのようです。

php7.2まではカウントできる変数の判定としてis_arrayも使用できます。

<?php

// php7.2
if (is_array($hoge)) {
    count($hoge);
}

ちなみに7.3からはcountが使用できる変数かどうかの関数としてis_countableが追加されました。

<?php

// php7.3
if (is_countable($bar)) {
    count($bar);
}

カウント可能かどうか判定する明示的な関数になるので、場合によっては意図的なコードを記述するのにも使用したいですね。

下位互換のない変更点ではありますが、今までがよしなに動いていただけなのでコード整理するいい機会かもしれないですね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?