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に突っ込むことはやめて、ちゃんとテストはしよう。その逆も然り。

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です