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
510
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
120
「DI」と仲良くなる
myamagishi
6
2.7k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3.1k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
860
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
14k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
200
世界最速? で PHP8 Native Framework 作った
myamagishi
1
780
Eloquent Driven Development
myamagishi
2
810
Other Decks in Programming
See All in Programming
新宿駅構内を三人称視点で探索してみる
satoshi7190
2
110
Conform を推す - Advocating for Conform
mizoguchicoji
3
710
ソフトウェアエンジニアの成長
masuda220
PRO
12
2k
Ça bouge du côté des animations CSS !
goetter
2
130
Unity Android XR入門
sakutama_11
0
170
Rails アプリ地図考 Flush Cut
makicamel
1
130
AIプログラミング雑キャッチアップ
yuheinakasaka
11
2.1k
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
190
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
14
4.5k
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
170
Code smarter, not harder - How AI Coding Tools Boost Your Productivity | Angular Meetup Berlin
danielsogl
0
100
PHP ステートレス VS ステートフル 状態管理と並行性 / php-stateless-stateful
ytake
0
110
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
What's in a price? How to price your products and services
michaelherold
244
12k
Docker and Python
trallard
44
3.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Optimizing for Happiness
mojombo
376
70k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
250
Site-Speed That Sticks
csswizardry
4
400
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Building an army of robots
kneath
303
45k
Agile that works and the tools we love
rasmusluckow
328
21k
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 まとめ