Slide 1

Slide 1 text

Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう! PHP Conference Japan 2022 - やまゆ https://fortee.jp/phpcon-2022/proposal/51f66d0e-5bae-4902-bb63-89700407204a

Slide 2

Slide 2 text

やまゆ - 札幌の PHPer(㈱インフィニットループ) - Babylon.js 勉強会 - 好き: 🍶、☕、🐇、デレマス、カピバラ - 最近: 壱百満天原サロメ、スプラトゥーン3

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

何故 LT 枠で 応募した自分?

Slide 5

Slide 5 text

Reflection

Slide 6

Slide 6 text

Reflection とは? - ランタイム等で「コードそのもの」の構造を取得・改変する技術 - 引数の型や名前を取得したり、 private メソッドを無理やり外で呼べる (危険) - メタプログラミングとも呼ばれる - ビジネスロジックでは使われることはほぼないが、ライブラリやFWでは重要 - PHP 8 Attribute も Reflection 経由で取得できる - PHP は(大雑把に言うと)コンパイルしないので、 容易に Reflection 情報を取得できる

Slide 7

Slide 7 text

例) json をクラスに変換したい

Slide 8

Slide 8 text

例) json をクラスに変換したい

Slide 9

Slide 9 text

こういう IF だと良さそう

Slide 10

Slide 10 text

こういう IF だと良さそう psalm でジェネリクス型を疑似表現! クラス名文字列とIDを指定して変換

Slide 11

Slide 11 text

実装例

Slide 12

Slide 12 text

実装例

Slide 13

Slide 13 text

実装例 該当クラスのメタ情報を取得 コンストラクタパラメータ一覧取得 null は優先して処理 ここでインスタンス化

Slide 14

Slide 14 text

実装例

Slide 15

Slide 15 text

- PHP では簡単に Reflection を扱える - PHP 8.1~ の型に優しい実装 - データのマッピングだけでなく、コード自動生成などにも寄与する - 社内ライブラリとして共有されていることもありそう - ビジネスロジックを楽にする仕組みとして入れると良い - Reflection は いいぞ。 https://gist.github.com/il-m-yamagishi/b845406086fdef32a5f794ff02eba30a Reflection まとめ