鍍金池/ 問(wèn)答/PHP  Linux/ 請(qǐng)問(wèn)interface實(shí)現(xiàn)后的具體應(yīng)用應(yīng)該怎么做?

請(qǐng)問(wèn)interface實(shí)現(xiàn)后的具體應(yīng)用應(yīng)該怎么做?

比如如下場(chǎng)景 , 中文名只是為了更直觀的說(shuō)明我想問(wèn)的問(wèn)題.

interface sotrage {
    public function save($m);
}   

根據(jù)接口實(shí)現(xiàn)了2個(gè)類(lèi).如下

class ftp implements sotrage {
    public function save($path) {
    }
}

class webdav implements sotrage {
    public function save($path) {
    }
}

用戶(hù)實(shí)際操作的時(shí)候, 用戶(hù)界面中有選項(xiàng), 給用戶(hù)自主選擇權(quán). ftp/webdav

比如某個(gè)controller

class upload($stroage='ftp',$path){
/* 請(qǐng)問(wèn)*/
/* 這里如何優(yōu)雅的根據(jù)不同$storage,調(diào)用不同的類(lèi)呢? */
/* 例子比較簡(jiǎn)單,只有2個(gè)實(shí)現(xiàn)接口的類(lèi), 但是不希望使用if/else/switch 這樣的方式感覺(jué)不是很優(yōu)雅. */
/* 反射? 魔術(shù)方法? */
/* 謝謝大家 */
}
回答
編輯回答
鹿惑

可以使用 抽象工廠

2017年8月25日 09:01
編輯回答
爆扎

建議看一下《重構(gòu)》,第八章有你想要的答案

2018年1月13日 15:58
編輯回答
網(wǎng)妓
class upload($stroage = 'ftp',$path)
{
    $stroageClass = new $stroage;
    $stroageClass->save($path);
}
2018年8月5日 21:19