请问interface实现后的具体应用应该怎么做?

比如如下场景 , 中文名只是为了更直观的说明我想问的问题.

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

根据接口实现了2个类.如下

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

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

用户实际操作的时候, 用户界面中有选项, 给用户自主选择权. ftp/webdav

比如某个controller

class upload($stroage='ftp',$path){
/* 请问*/
/* 这里如何优雅的根据不同$storage,调用不同的类呢? */
/* 例子比较简单,只有2个实现接口的类, 但是不希望使用if/else/switch 这样的方式感觉不是很优雅. */
/* 反射? 魔术方法? */
/* 谢谢大家 */
}
阅读 2.8k
3 个回答
class upload($stroage = 'ftp',$path)
{
    $stroageClass = new $stroage;
    $stroageClass->save($path);
}

建议看一下《重构》,第八章有你想要的答案

可以使用 抽象工厂

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题