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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Masaru Yamagishi
September 24, 2022
Programming
2
930
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
PHP Conference Japan 2022 LT Slide
Masaru Yamagishi
September 24, 2022
Tweet
Share
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
Babylon.js 勉強会 vol.4 JAPAN 活動紹介
myamagishi
0
120
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
980
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
200
「DI」と仲良くなる
myamagishi
6
3.5k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
4k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
1.1k
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
15k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
290
世界最速? で PHP8 Native Framework 作った
myamagishi
1
850
Other Decks in Programming
See All in Programming
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
490
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
atmaCup #23でAIコーディングを活用した話
ml_bear
3
440
CSC307 Lecture 04
javiergs
PRO
0
660
AI & Enginnering
codelynx
0
130
SourceGeneratorのススメ
htkym
0
210
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
830
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1.1k
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
770
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
470
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
170
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
2
250
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Facilitating Awesome Meetings
lara
57
6.8k
The SEO identity crisis: Don't let AI make you average
varn
0
360
Music & Morning Musume
bryan
47
7.1k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
320
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
BBQ
matthewcrist
89
10k
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 まとめ