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
DIとLaravel
Search
polidog
PRO
November 23, 2018
Programming
450
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DIとLaravel
polidog
PRO
November 23, 2018
More Decks by polidog
See All by polidog
AIがコードを書く時代の ジェネレーティブプログラミング
polidog
PRO
3
1.1k
小さな開発会社を作った理由(再)
polidog
PRO
0
280
React Server ComponentsでAPI不要の開発体験
polidog
PRO
1
840
小さな開発会社が受託開発に力を入れる理由
polidog
PRO
0
530
小さな開発会社を作った理由
polidog
PRO
1
3.6k
小さな開発会社がWebサービスを作る理由
polidog
PRO
1
860
トランザクションスクリプトは何がダメなのか?
polidog
PRO
2
4k
React初心者がHooksを理解するためにコードを読んでみた
polidog
PRO
0
620
object-mapperを作ってる話
polidog
PRO
0
410
Other Decks in Programming
See All in Programming
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
500
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
2
1.5k
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.7k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
230
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
5分で問診!Composer セキュリティ健康診断
codmoninc
0
270
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
220
霧の中の代数的エフェクト
funnyycat
1
390
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
yield再入門 #phpcon
o0h
PRO
0
400
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
210
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
970
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
370
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
The Spectacular Lies of Maps
axbom
PRO
1
860
GitHub's CSS Performance
jonrohan
1033
470k
Transcript
DIͱLaravel @polidog
ࣗݾհ • @polidog • ੩Ԭग़ • ౦ژͰSymfonyॻ͍ͯ͝൧৯͍ͯ·͢ • SymfonyϢʔβʔձͷਓ •
Symfony͖Ͱ͢
Dependency Injectionʁ
1 <?php 2 3 namespace App\Http\Controllers; 4 5 6 use
App\Executor; 7 8 class Index extends Controller 9 { 10 /** 11 * @var Executor 12 */ 13 private $executor; 14 15 /** 16 * IndexController constructor. 17 * @param Executor $executor 18 */ 19 public function __construct(Executor $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 {
ίϯϙʔωϯτؒͷґଘؔ ΛϓϩάϥϜͷιʔείʔυ ͔Βഉআ͠ɺ֎෦ͷઃఆϑΝ ΠϧͳͲͰೖͰ͖ΔΑ͏ʹ ͢ΔιϑτΣΞύλʔϯ (wikipedia)
None
ར༻͢ΔΦϒδΣΫτͷੜ ʹؔ͢ΔࣝΛอ࣋͠ͳ͍
ίϯετϥΫλͷҾͰ ґଘ͢ΔΦϒδΣΫτΛࢦఆ ͢Δ
1 <?php 2 3 namespace App\Http\Controllers; 4 5 6 use
App\Executor; 7 8 class Index extends Controller 9 { 10 /** 11 * @var Executor 12 */ 13 private $executor; 14 15 /** 16 * IndexController constructor. 17 * @param Executor $executor 18 */ 19 public function __construct(Executor $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 {
ͦͯ͠֎෦͔ΒͦͷΦϒδΣ ΫτΛͯ͠Β͏
ར༻͢ΔΦϒδΣΫτͷੜ ʹؔ͢ΔࣝΛอ࣋͠ͳ͍ࣄ
Service Container
αʔϏείϯςφͱʁ • ΦϒδΣΫτͷੜखॱͷཧ • ੜͨ͠ΦϒδΣΫτͷཧ
app()
࣮ࡍʹDIΛମݧͯ͠ΈΔ
1 <?php 2 3 namespace App\Http\Controllers; 4 5 6 use
App\Executor; 7 8 class Index extends Controller 9 { 10 /** 11 * @var Executor 12 */ 13 private $executor; 14 15 /** 16 * IndexController constructor. 17 * @param Executor $executor 18 */ 19 public function __construct(Executor $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 {
5 6 class Executor 7 { 8 /** 9 *
@var Processor 10 */ 11 private $output; 12 13 /** 14 * @var string 15 */ 16 private $name; 17 18 /** 19 * Executor constructor. 20 * @param Processor $output 21 * @param string $name 22 */ 23 public function __construct(Processor $output, string $name) 24 { 25 $this->output = $output; 26 $this->name = $name; 27 } 28 29 public function run() : string
None
5 6 class Executor 7 { 8 /** 9 *
@var Processor 10 */ 11 private $output; 12 13 /** 14 * @var string 15 */ 16 private $name; 17 18 /** 19 * Executor constructor. 20 * @param Processor $output 21 * @param string $name 22 */ 23 public function __construct(Processor $output, string $name) 24 { 25 $this->output = $output; 26 $this->name = $name; 27 } 28 29 public function run() : string
Binding Primitives https://laravel.com/docs/5.7/container
5 use App\Executor; 6 use Illuminate\Support\ServiceProvider; 7 8 class AppServiceProvider
extends ServiceProvider 9 { 10 /** 11 * Bootstrap any application services. 12 * 13 * @return void 14 */ 15 public function boot() 16 { 17 // 18 } 19 20 /** 21 * Register any application services. 22 * 23 * @return void 24 */ 25 public function register() 26 { 27 $this->app->when(Executor::class) 28 ->needs('$name') 29 ->give(config('app.name')); 30 }
Interface
5 6 use App\ExecutorInterface; 7 8 class Index extends Controller
9 { 10 /** 11 * @var ExecutorInterface 12 */ 13 private $executor; 14 15 /** 16 * Index constructor. 17 * @param ExecutorInterface $executor 18 */ 19 public function __construct(ExecutorInterface $executor) 20 { 21 $this->executor = $executor; 22 } 23 24 public function __invoke() 25 { 26 return view('index', [ 27 'message' => $this->executor->run() 28 ]); 29 } 30
None
9 class AppServiceProvider extends ServiceProvider 10 { 11 /** 12
* Bootstrap any application services. 13 * 14 * @return void 15 */ 16 public function boot() 17 { 18 // 19 } 20 21 /** 22 * Register any application services. 23 * 24 * @return void 25 */ 26 public function register() 27 { 28 $this->app->bind(ExecutorInterface::class, Executor::class); 29 $this->app->when(Executor::class) 30 ->needs('$name') 31 ->give(config('app.name')); 32 } 33 }
bind?
ΦϒδΣΫτͷੜखॱΛొ ͢Δ
make?
࣮ࡍʹΦϒδΣΫτΛੜ͢ Δ
?>