Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
Search
Masaru Yamagishi
September 24, 2022
Programming
2
770
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
PHP Conference Japan 2022 LT Slide
Masaru Yamagishi
September 24, 2022
Tweet
Share
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
490
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
120
「DI」と仲良くなる
myamagishi
6
2.7k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3.1k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
850
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
14k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
190
世界最速? で PHP8 Native Framework 作った
myamagishi
1
780
Eloquent Driven Development
myamagishi
2
800
Other Decks in Programming
See All in Programming
ASP. NET CoreにおけるWebAPIの最新情報
tomokusaba
0
370
Open source software: how to live long and go far
gaelvaroquaux
0
630
時計仕掛けのCompose
mkeeda
1
290
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
750
Spring gRPC について / About Spring gRPC
mackey0225
0
220
color-scheme: light dark; を完全に理解する
uhyo
3
200
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
130
sappoRo.R #12 初心者セッション
kosugitti
0
250
チームリードになって変わったこと
isaka1022
0
200
Honoとフロントエンドの 型安全性について
yodaka
6
830
技術を根付かせる / How to make technology take root
kubode
1
250
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
160
Featured
See All Featured
For a Future-Friendly Web
brad_frost
176
9.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Documentation Writing (for coders)
carmenintech
67
4.6k
Become a Pro
speakerdeck
PRO
26
5.1k
Writing Fast Ruby
sferik
628
61k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Bash Introduction
62gerente
611
210k
Transcript
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう! PHP Conference Japan 2022 - やまゆ
https://fortee.jp/phpcon-2022/proposal/51f66d0e-5bae-4902-bb63-89700407204a
やまゆ - 札幌の PHPer(㈱インフィニットループ) - Babylon.js 勉強会 - 好き: 🍶、☕、🐇、デレマス、カピバラ
- 最近: 壱百満天原サロメ、スプラトゥーン3
None
何故 LT 枠で 応募した自分?
Reflection
Reflection とは? - ランタイム等で「コードそのもの」の構造を取得・改変する技術 - 引数の型や名前を取得したり、 private メソッドを無理やり外で呼べる (危険) -
メタプログラミングとも呼ばれる - ビジネスロジックでは使われることはほぼないが、ライブラリやFWでは重要 - PHP 8 Attribute も Reflection 経由で取得できる - PHP は(大雑把に言うと)コンパイルしないので、 容易に Reflection 情報を取得できる
例) json をクラスに変換したい
例) json をクラスに変換したい
こういう IF だと良さそう
こういう IF だと良さそう psalm でジェネリクス型を疑似表現! クラス名文字列とIDを指定して変換
実装例
実装例
実装例 該当クラスのメタ情報を取得 コンストラクタパラメータ一覧取得 null は優先して処理 ここでインスタンス化
実装例
- PHP では簡単に Reflection を扱える - PHP 8.1~ の型に優しい実装 -
データのマッピングだけでなく、コード自動生成などにも寄与する - 社内ライブラリとして共有されていることもありそう - ビジネスロジックを楽にする仕組みとして入れると良い - Reflection は いいぞ。 https://gist.github.com/il-m-yamagishi/b845406086fdef32a5f794ff02eba30a Reflection まとめ