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
640
Reflection を使いこなして、 オブジェクトを型安全に マッピングしよう!
PHP Conference Japan 2022 LT Slide
Masaru Yamagishi
September 24, 2022
Tweet
Share
More Decks by Masaru Yamagishi
See All by Masaru Yamagishi
「DI」と仲良くなる
myamagishi
4
2.3k
大解剖!amphpを使って非同期 PHP を実現しよう!
myamagishi
1
1.9k
PHP で負荷試験のシナリオを書きたい!ので amphp を使って自作した件
myamagishi
2
530
秒間 10,000 リクエストを "簡単に"いなすゲームサーバーを Laravel で作る設計
myamagishi
9
12k
xR グラスが普及した新時代を妄想する - XRKaigi 2022
myamagishi
0
130
世界最速? で PHP8 Native Framework 作った
myamagishi
1
700
Eloquent Driven Development
myamagishi
2
710
Laravel x nuxt.js ~認証難しい問題~
myamagishi
0
930
Other Decks in Programming
See All in Programming
イベント駆動アーキテクチャ導入の手引きと共通の落とし穴 / Guide to Implementing Event-Driven Architecture and Common Pitfalls
nrslib
12
3.9k
Kotlin/Androidでテスト駆動開発をはじめよう
hiroaki404
1
230
GoogleI/O2024 LT報告会資料
shinsukefujita1126
0
200
タクシーアプリ『GO』を運営する中発生した様々な失敗例の紹介
mot_techtalk
9
5.4k
生成AIキャラクター作成プラットフォームにおける LLM応答の柔軟性の拡張の工夫
ykimura517
3
920
【Gemini本発売記念】npaka による マルチモーダルとローカルLLMの現在と未来
npaka
3
910
2024/7/11発刊!開発生産性の教科書がざっとわかるスライド 2024/06/20 / A Brief Overview of the Textbook on Development Productivity
ma3tk
0
120
about #67401 //go:linkname
andpad
2
19k
Kotlin Standard Library Gems
antonarhipov
2
290
俺たちのPHPの型システムはすごいぞっ!
suguruooki
1
210
Swift 6 の地味な (?) アップデート
tajitaji
1
100
プラットフォームエンジニアリングを 普及と実践し続けて見えてきた利点とリスク
zawa_zawa0210
2
780
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
24
1.7k
Testing 201, or: Great Expectations
jmmastey
32
6.8k
Product Roadmaps are Hard
iamctodd
PRO
46
10k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.2k
GraphQLの誤解/rethinking-graphql
sonatard
58
9.5k
Music & Morning Musume
bryan
42
5.8k
Building Adaptive Systems
keathley
33
2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
15
8.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
21k
Docker and Python
trallard
36
2.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
359
22k
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 まとめ