WebエンジニアのLoL日記

LoLをプレイしたりLJLの試合を見たりするのが好きなエンジニア。LoLのイベントやパッチノートなど気になった点を記事にしたり、LJLについの記事をかいたりしています。某社でWeb系のエンジニアとして働いているので、技術系の記事もたまに書きます。コンタクトを取りたい場合はtwitterまで。

PHP7化する際にcountメソッドとException周りでハマる件

f:id:yoshiki_utakata:20181004212834j:plain

countメソッド

要するに以下のQiitaの記事の内容である

qiita.com

PHPのcount関数を利用したときに以下のWarningげ出ることがある

Warning:  count(): Parameter must be an array or an object that implements Countable

countメソッドにはCountableなものしか渡せないというWarningだ。Warningなのでphpcsなどで気づきづらいが、error_reportingの設定などをしていないと、Webページに表示されてしまったりするので注意だ。

例えば、今まで count(null) これは 0 を返していた。PHP7からは、これがWarningを吐くようになったというわけだ。

自分たちが使う分には問題無いが、稀にライブラリなどでこのWarningを踏んでいるものがある。例えば FluentPDO というPHPのORMapper(DB Query Builder)のライブラリなどだ。

github.com

FluentPDOに関しては version 1.1.3 で治っていたようだ。「ライブラリがPHP7に対応しているかどうか」や「phpcsで問題ないと判定されていたが実はWarningが出ていたりしないか」はチェックが必要だ。

Exception周り

PHP7で新しく Throwable というクラスが誕生した。今まではErrorとExceptionというクラスが完全に分かれており、まとめてキャッチすることは不可能だったが、PHP7から、ErrorとExceptionがともにThorwableを継承するようになった。以下の記事の図がわかりやすい。

qiita.com

各種フレームワークを導入している場合、今までExceptionをキャッチしていたところが、Thorwableになっていたりする。そうなると、今までキャッチしていなかったErrorもキャッチされるようになるので、想定外の動画が起こる場合がある。

まとめ

countとExceptionには注意!