php中,想要用interface规范方法,但是实现类需要传入不同参数,怎么解决?

大致结构如下

interface A {
    public function setData();
}  

class B implements A{
    public function setData(User $user)
}
  
class C implements A{
    public function setData(Customer $customer)
}

B和C需要传入不同的data类,那A中的setData该怎么写参数? 当前这种写法编辑器会报错

已经尝试过:
1 A中不写参数,B,C中写不同参数
2 A中写BC共同父类,B,C参数分别写对应类
3 A中写另外某interface,B C参数类分别实现

阅读 6.6k
3 个回答

首先,interfact是规定了一样的方法签名
方法签名:方法名称参数列表组成
你的需要是函数重载

大概试了一下, 确实不支持这样, 所以只能用继承了, 接口 A 里没有 setData 接口 B & C 继承接口 A , 添加不同的 setData

interface AAAA {
    public function other(EEE $aaa);
}

interface BBBB extends AAAA {
    public function setData(QQQ $aaa);
}

interface CCCC extends AAAA {
    public function setData(WWW $aaa);
}

class B implements BBBB {
    public function setData(QQQ $user){
    }
    public function other(EEE $user){
    }
}

class C implements CCCC {
    public function setData(WWW $customer) {
    }
    public function other(EEE $user){
    }
}

为什么不在构造函数里面传参呢。
还有就是,你可以另外做一个容器,把User和Customer的实例放到容器里面嘛,不建议这样直接传入实例。

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