PHP 板


LINE

看板 PHP  RSS
Dependency Injection,指的是让 Dependency 能在 runtime 改变, 而不影响 client 本身的实作。 而这个例子,Animal 跟 Bird 本身就没有依赖关系,没有 Dependency,自然没有 DI 的感觉。 若以电脑和影印机、萤幕来举例,电脑需要用输出装置才能输出讯息︰ class Computer { public $output; public function use($something) { $this->output = $something; } public function say_hi() { $this->output("Hi I am computer!"); } } function printer($src_string) { // print $src_string to printer... } function screen($src_string) { // put $src_string on screen... } 那麽在使用时就可以很随易的使用不同装置︰ $computer = new Computer $computer->use(printer); $computer->say_hi(); $computer->use(screen); $computer->say_hi(); 今天突然改版,不用印表机也不用萤幕,改用沙画。 那你只要建立一个沙画的 service,要用时 inject 进 computer 就行了︰ function draw_on_sand($src_string) { // draw string on sand... } $computer->use(draw_on_sand); $computer->say_hi(); 又或者你只是要 debug,想把电脑的输出印到自己的萤幕上︰ funcion print($src_string) { echo $src_string; } $computer->use(print); $computer->say_hi(); 到这边应该看得出来,Dependency Injection 的好处就是,Client 完全 不用知道 $this->output 是什麽玩意,只要把字串送给它就好。 引述前一篇 banjmin > 关系被"介面"decoupling了 > 也就是"针对介面写程式,不要针对实作写程式"的OO守则 -- (* ̄▽ ̄)/‧★*"`'*-.,_,.-*'`"*-.,_☆,.-*` http://i.imgur.com/oAd97.png --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.50.176
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1433984602.A.1FF.html
1F:推 et282523: 推,感觉很清楚! 06/11 09:56
2F:推 chan15: 我的问题好像表达不是很清楚,我的问题是差异在哪 06/11 15:20
3F:→ chan15: 你上述的方法我一样可以转成 abstract 06/11 15:21
4F:→ chan15: 像我的 sample code 说的 (new Game(new Mario))->play() 06/11 15:22
5F:→ chan15: 变成 (new Mario)->play() 这样而已 06/11 15:23
6F:→ chan15: 结果是完全一样的,这个设计准则不太可能只是语意而已吧 06/11 15:23
7F:→ eight0: 如我前面所说,这个例子不是依赖的 Service/Client 关系 06/11 23:10
8F:→ eight0: Mario 就是 Game 的 subclass。若设计成 DI 的话,就可以 06/11 23:15
9F:→ eight0: 在程式执行时置换新的游戏引擎,如 06/11 23:16
10F:→ eight0: $game = new Game; $game->select(mario); $game->play(); 06/11 23:17
11F:→ eight0: 要存档换 race 就像 06/11 23:18
12F:→ eight0: $game->save(); $game->select(race); $game->play(); 06/11 23:19
13F:→ eight0: 而 subclass 的方式称为 template method,它一样可以把共 06/11 23:21
14F:→ eight0: 通的实作抽到上层,但使用上就不像 DI 自由,如不能在执行 06/11 23:22
15F:→ eight0: 时抽换、依赖 parent class 等等。 06/11 23:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP