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
790
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
590
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
130
「DI」と仲良くなる
myamagishi
6
2.9k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3.3k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
890
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
14k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
210
世界最速? で PHP8 Native Framework 作った
myamagishi
1
780
Eloquent Driven Development
myamagishi
2
830
Other Decks in Programming
See All in Programming
Modern Angular:Renovation for Your Applications @angularDays 2025 Munich
manfredsteyer
PRO
0
140
Coding Experience Cpp vs Csharp - meetup app osaka@9
harukasao
0
110
Develop Faster With FrankenPHP
dunglas
2
2.5k
Day0 初心者向けワークショップ実践!ソフトウェアテストの第一歩
satohiroyuki
0
420
Compose Navigation実装の見通しを良くする
hiroaki404
0
180
CQRS+ES勉強会#1
rechellatek
0
400
CTFのWebにおける⾼難易度問題について
hamayanhamayan
1
980
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
180
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
240
Going Structural with Named Tuples
bishabosha
0
170
snacks.nvim内のセットアップ不要なプラグインを紹介 / introduce_snacks_nvim
uhooi
0
340
令和トラベルにおけるコンテンツ生成AIアプリケーション開発の実践
ippo012
1
260
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
7
620
Faster Mobile Websites
deanohume
306
31k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
28
2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
Bash Introduction
62gerente
611
210k
Automating Front-end Workflow
addyosmani
1369
200k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
The Pragmatic Product Professional
lauravandoore
33
6.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.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 まとめ