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
640
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
PHP Conference Japan 2022 LT Slide
Masaru Yamagishi
September 24, 2022
Tweet
Share
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
「DI」と仲良くなる
myamagishi
5
2.4k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
2.1k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
580
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
9
12k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
140
世界最速? で PHP8 Native Framework 作った
myamagishi
1
710
Eloquent Driven Development
myamagishi
2
720
Laravel x nuxt.js ~認証難しい問題~
myamagishi
0
950
Other Decks in Programming
See All in Programming
3 Effective Rules for Success with Signals in Angular
manfredsteyer
PRO
0
120
Trial
cairolibrary720
1
130
Javaの現状2024夏 / Java current status 2024 summer
kishida
4
1.4k
リハビリmruby
kishima
1
160
わかりやすい正解を捨てて、コトに向き合う - スクラムフェス金沢2024 スポンサーセッション
yusukekokubo
0
170
DMMプラットフォームにおけるTiDBの導入から運用まで
pospome
7
3k
APIのない大学ログインWebサービスをWKWebViewとJavaScriptでアプリ化した話
akidon0000
1
330
Temporalを取り巻く仕様を整理する
sajikix
0
120
CSC307 Lecture 08
javiergs
PRO
0
330
DynamoDB コスト最適化っぽいことの基本 with Terraform
kuro_kurorrr
2
250
Prompt FlowによるLLMアプリケーション開発
yuto2000
1
1k
TiDB Serverless ~理想のServerless DBを考える~
soso_15315
1
160
Featured
See All Featured
The Language of Interfaces
destraynor
151
23k
Building an army of robots
kneath
301
42k
Designing with Data
zakiwarfel
96
5k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Music & Morning Musume
bryan
43
5.9k
Docker and Python
trallard
37
2.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
229
130k
Web development in the modern age
philhawksworth
203
10k
What's in a price? How to price your products and services
michaelherold
239
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
Automating Front-end Workflow
addyosmani
1362
200k
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 まとめ