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
800
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
610
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
130
「DI」と仲良くなる
myamagishi
6
3k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3.3k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
910
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
14k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
220
世界最速? で PHP8 Native Framework 作った
myamagishi
1
790
Eloquent Driven Development
myamagishi
2
830
Other Decks in Programming
See All in Programming
Road to RubyKaigi: Making Tinny Chiptunes with Ruby
makicamel
4
120
Memory API : Patterns, Performance et Cas d'Utilisation
josepaumard
0
130
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
1.5k
SQL Server ベクトル検索
odashinsuke
0
180
海外のアプリで見かけたかっこいいTransitionを真似てみる
shogotakasaki
1
170
Qiita Bash
mercury_dev0517
2
200
Coding Experience Cpp vs Csharp - meetup app osaka@9
harukasao
0
750
趣味全開のAITuber開発
kokushin
0
200
Dissecting and Reconstructing Ruby Syntactic Structures
ydah
0
650
Lambda(Python)の リファクタリングが好きなんです
komakichi
3
190
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
1k
アプリを起動せずにアプリを開発して品質と生産性を上げる
ishkawa
0
2.8k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
430
65k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.2k
We Have a Design System, Now What?
morganepeng
52
7.5k
How to train your dragon (web standard)
notwaldorf
90
6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
550
Music & Morning Musume
bryan
47
6.5k
KATA
mclloyd
29
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.4k
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 まとめ