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
960
2
Share
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
PHP Conference Japan 2022 LT Slide
Masaru Yamagishi
September 24, 2022
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
Babylon.js 勉強会 vol.4 JAPAN 活動紹介
myamagishi
0
140
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
1k
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
220
「DI」と仲良くなる
myamagishi
6
3.6k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
4.1k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
1.2k
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
16k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
310
世界最速? で PHP8 Native Framework 作った
myamagishi
1
870
Other Decks in Programming
See All in Programming
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
170
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
410
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
680
AIと共に生きる技術選定 2026
sgash708
0
140
[RubyKaigi 2026] Require Hooks
palkan
1
310
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
160
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
2.8k
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
350
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
450
実用!Hono RPC2026
yodaka
2
310
Agentic Elixir
whatyouhide
0
450
Agentic UI in the Frontend: Architectures with Open Standards @JAX 2026 in Mainz
manfredsteyer
PRO
0
110
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
230
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Deep Space Network (abreviated)
tonyrice
0
130
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
350
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
920
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
190
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
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 まとめ