Deprecated: Using ${var} in strings is deprecated, use {$var} instead に対処
もはや恒例ともいうべきPHPのバージョンアップ。
避けては通れない道とはいえ、バージョンアップごとに何かしら新たなエラーが発生します。
今回新たにPHP8.2をテストしてみたのですが、多分に漏れず今まで動いていたプログラムがエラーを吐きました。
思えばいままでいくつもこのようなことがありました。
今回も変更点を調べ対処いたしましたので忘備録として記録いたします。
現象はこのような感じです
今回のソース
1 2 3 4 5 6 |
<?php $date = date("Y-m-d H:i:s"); var_dump("現在時間:${date}"); ?> |
いつものごとく、英語でエラーがでました。
一応動作はしましたが、エラーが気になります。
これって何が問題なのでしょうか?
原因は波括弧({})構文の記述方法
波括弧とは、変数を他の文言といっしょくたに出力するときに指定する記述です。
例えば、$value があるとして、”{$value}個” というような記述をします。
PHP8.1までは以下の記述方法どちらでもOKでした。
- ${value} $を波括弧外側に記述
- {$value} $を波括弧の内側に記述
PHP8.2から「{$value}」でないとエラーになるようになりました。
PHP8.2以降${value}という記述はエラーになります。
私は、昔から${value}という記述をしていたためごっそりエラーが発生しました。
ただ、修正は簡単でした。
${value} → {$value}に記述にすれば直ります
波括弧を使った記述自体がなくなったわけではありません。
あくまでも記述方法が統一化されただけです。
なので、正しい記述に書き換えてやればエラーが出なくなります。
先ほどの例も以下のように書き換えればOKです。
1 2 3 4 5 6 7 |
<?php $date = date("Y-m-d H:i:s"); // ${date}を{$date}に修正 var_dump("現在時間:{$date}"); ?> |
今回はあっさり解決しました。
問題は修正箇所が多いですが、そこはエディターの機能を駆使してなおします。
修正する場合は、${}を{$}に書き換えればOKなので簡単です。
ただ私の場合、波括弧を画面出力部に多用しているため、修正箇所が多いです。
一つ一つ手作業でやっていったら日が暮れますし、修正ミスもでます。
そこで、エディターの便利機能を使って一括修正で対応しました。
grepといって、指定したソース(ワイルドカード可)でまとめて検索し、該当箇所を洗い上げてくれます。
あとは検出した部分を一括置換で修正します。
エディタごとに機能が異なるため、別のエディターの場合もっと簡単な方法もあるかもしれません。
ともあれ、該当箇所を検索で見つけるやり方が確実です。
PHPバージョンアップごとにでるエラーは今後もきおつけつつ対応
思えば、PHPのバージョンが上がるたびに、エラー対処を行ってきました。
PHPのバージョンアップは、PHPの問題点が改善されるから起こるものです。
そのたびに、今までの記述方法がエラーになることがしばしばありました。
これからも同様なことが想定されますが、あくまでも記述方法が変わるだけで、論理的な部分は同じです。
どういうことかというと、プログラムの基本設計部分まで直す必要はないということです。
たまに、ベースプログラムがあまりにもクセが強くなりすぎて、メンテナンスができず不具合だらけの場合、1から作り直したほうが早いケースがあります。
実際に、いままでそのようなことが幾度かありました。
ですが基礎設計がしっかりしていれば、文法修正だけで事足りるのです。
プログラム開発を行う場合、最初の設計フェーズをめんどくさいと思わず、丁寧にやっていれば10年単位で動作するシステムが構築できるのです。
今回は、そういったことも感じた出来事でした。