PHP7系の配列でIllegal string offsetで暗黙的型変換ができなくなる
PHPのバージョン跨ぎのテストはVPSのほんちゃん環境を使わずこのブログを使って行ってるんだけど(共用サーバーってテスト環境としては最高だよね)、PHP5系からPHP7系に切り替えた瞬間に配列であるvar[key] = ‘hoge’のような形でデータを突っ込んでいる部分にIllegal string offsetのエラーが発生したそんな話。
このエラーについて、俺はこんな感じでコードを書いていた。
$data = ''; $data['hoge'] = 'hoge'; echo $data['hoge'];
呆けていたのか無意識なのか、とにかく何を思ったのか配列として扱いたい$dataの変数の初期化を文字列型で行っていた凡ミス。で、その後で無理やり連想配列にしたから起きたエラー。
これ、実はPHP5系では何もエラーを返さない。明らかに間違っている初期化の指定なのに。
巷で噂のPHP7の速度も、ブログの記事が多いせいか共用サーバーのせいか速度の体感があまり感じられないので、普段は使い慣れたPHP5系を使っているんだけど、「常に後方互換を意識してるし、バージョン互換性を保ってプログラム作ってるし大丈夫でしょ!」と思って高をくくっていたらこの有様w
同ケースで配列の初期化を行う際は、きちんと直で配列化するなり、array()関数使うなりして適宜指定した方がいい。
$data = array(); $data['hoge'] = 'hoge'; echo $data['hoge'];
今回はただの凡ミスだったが、バージョン互換性に気をつけて作っても思わぬところでエラーは出てくる場合がある。(今のところ遭遇したのはこれっきりだけど。)
PHP5系で作ったコードをノーチェックでPHP7に突っ込むことはやめて、ちゃんとテストはしよう。その逆も然り。