Laravel 5.5 + PHP 7.2 で count のエラー (Warning) が発生
こんにちは、kenzauros です。
とあるプロジェクトで Laravel 5.5 を使っているものがあるのですが、最近手元の開発環境を更新して PHP 7.2 にしたところ、下記のエラーに見舞われて一部の機能が動かないという事態になりました。
ErrorException in Builder.php line ...:
count(): Parameter must be an array or an object that implements Countable
原因
PHP 7.2 で count(NULL)
が Warning を吐くようになったことが原因でした。
まぁ、つまり「NULL チェックしてね」ということなので、 count(NULL)
がエラーになるのはいいのですが、マイナーバージョンでいきなり変更されるとビビりますね。
本番環境で起こる可能性があるかと思うとゾッとします。
対策
すでに先人がいろいろ検討されていますが、今のところ Laravel 本体に手をいれるか、 PHP 7.2 以降なら Warning を吐かないようにしてやるしかないようです。
routes/web.php
の冒頭に下記のように追記します。
※ public/index.php
では効果がありませんでした。
<?php
if (version_compare(PHP_VERSION, '7.2.0', '>=')) {
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
}
もちろん php.ini で設定してもよいとは思います。いずれにしろ、すべての Warning を抑制してしまうので、開発環境としてはそれでいいのか感はあります。
本来は Laravel のバージョンを更新するほうがいいのですが、現状ではフレームワークバージョンはあまり上げたくないのと、今から大規模に Laravel 5.5 で開発することはないので、とりあえず今回の回避策でしのぎます。