#あすみかんの上にあすみかん

#たのしいことしかかかないことをここに決意します

PHP8.3の機能を振り返る をみたよ / asumikam #phpcon_odawara Advent Calendar

adventar.org

これは、asumikam #phpcon_odawara Advent Calendarの7日目の記事です🎄 本日は「PHP8.3の機能を振り返る」の感想を書いていきます!

💡 トーク概要・動画 fortee.jp

📖 スライド speakerdeck.com

感想

このトークは2023年11月にリリースされたPHP8.3の機能をかいつまんで紹介してくれる発表となっております。 感想ブログをチンタラしている間にPHP8.4がリリースされましたが・・・。

登壇の冒頭ではリリース頻度についての紹介もありましたが、PHPの次期バージョンはこの時期どうなっているのか、Internalsの開発体制について をみたよ / asumikam #phpcon_odawara Advent Calendar - #あすみかんの上にあすみかんを参照するとよりわかると思います。 しかしこうも並べてみると高い頻度でリリースが為されていることがわかりますね。

清家さんの発表でリストアップされていたトピックと感想を並べていきます。

  • クラス定数の型付け
    • before: interfaceに定義されているクラス定数は実装先で型を変えてしまえる
    • after: 型を指定できるようになり、実装先で型を変えられないようにできる
      • const string NAME = 'asumikam'のように
    • めちゃくちゃ余談ですが、私が2年目の際に「これはconstで定義すると良いよ」と教えたときに新卒の子から「でも継承先(実装先)で上書きできますよね?これで書く理由はなんなのですか?」と言われて冷や汗が吹き出たのを覚えています。
  • クラス定数の文字列指定
    • before: クラス定数を動的に参照するとき少々まどろっこしい(constant関数を使うなどして)
    • after: メソッドや静的メソッドを動的に参照するような書き方で書けるようになった
    • 清家さんが発表で触れていたenumのケースは賢いですね
    • とはいえ動的に参照するコードは自分はあまり書かないようにしているかも。みなさんはどうですか...?
  • Attriute#[\Override] の追加
    • before: オーバーライドする意図があったのにtypoしてしまって一生気づかない(PHPUnitsetUppと書いてしまうなど)
    • after: オーバーライドする意図があるメソッドにAttriute#[\Override]を付与できてちゃんと縛れる
    • こういうのをパッと支えて文化として馴染むと、より堅牢なコードになっていきそう
  • 読み取り専用プロパティのディープクローン
    • before: readonlyのプロパティは不変なので書き換えが不可
    • after: readonlyのプロパティがクローン時にのみ書き換えられる
    • 現実に即した使いやすさを追求している感があって良いですよね
  • json_validate
    • before: json_decode関数でjsonのフォーマットの検証をハックしていた
    • after: json_validate関数でjsonのフォーマットを確かめられるようになった
    • ハックのように書くのはどうしてもコードが長くなっちゃうので、シュッと書けるようになったのはデカい!!!
  • Rondom\Rondmizer::getBytesFromString
    • before: ゴリゴリ自作するしかない
    • after: 指定の文字列からランダムに文字列を持ってきてくれるようになった
  • Rondom\Rondmizer::getFloat, Rondom\Rondmizer::nextFloat
    • before: ゴリゴリ自作するしかない
    • after: 指定の範囲からランダム不動小数点を得られる
    • Rondmizer系は業務上まだ使ったことがないので、「ほえ〜〜」という感じなのですが、ランダム値が求められるプロダクトを開発しているところはシュッとコードが短くなって気持ちええ〜〜という感じなのだろうか、と想像しました

ザッと書いていきました!!!

紹介してくれている日々に潜むBadケースが「あるある〜〜〜」という感じだし、逆にこんなに便利になるよなGoodケースが「たしかにめちゃくちゃ便利や〜〜」となる感じで、自分ごとにさせてくれるのがウマいな・・・と思いました。

最後のまとめの際に「状況に応じて堅く書いたり柔軟に書いたり、それが選択可能」と言っていて、良い表現だな...と思いました。どちらでもできるようになっていくPHP、めっちゃ良いですね😎!

清家史郎さん、登壇ありがとうございました

丁寧にPHP8.3を紹介してくれていたので、きっと会場でもたすかる〜な人がたくさんいたんだろうな〜〜とおもいました!! PHP8.2との比較を載せてくれているのも大変わかりやすく、最高でした。

発表ありがとうございました!!🐸✨