Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
Search
Masaru Yamagishi
September 24, 2022
Programming
2
910
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
110
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
910
3D ブラウザゲーム開発を始めたい人のために準備している話
myamagishi
1
190
「DI」と仲良くなる
myamagishi
6
3.3k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
3.9k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
1.1k
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
19
15k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
280
世界最速? で PHP8 Native Framework 作った
myamagishi
1
840
Other Decks in Programming
See All in Programming
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
430
AIエージェントの設計で注意するべきポイント6選
har1101
5
1.2k
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
130
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
350
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.6k
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
Microservices rules: What good looks like
cer
PRO
0
1.5k
Integrating WordPress and Symfony
alexandresalome
0
160
エディターってAIで操作できるんだぜ
kis9a
0
740
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
370
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.3k
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
230
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
29
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
1.9k
Embracing the Ebb and Flow
colly
88
4.9k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
2
2.7k
Are puppies a ranking factor?
jonoalderson
0
2.3k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
86
Navigating Team Friction
lara
191
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
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 まとめ