dongxia527680 2017-04-03 06:30
浏览 114
已采纳

PHP(7.1)继承问题

I have the following structure:

class AffiliateRepository extends GenericRepository implements IAffiliateRepository {

}


abstract class GenericRepository  {
    public function save(BaseModel $model) : int{
        $model->save();
        return $model->getId();
    }

}

interface IAffiliateRepository  {

    public function save(Affiliate $affiliate) : int;
}

public class Affiliate extends BaseModel{}


$affiliateRepository  = new AffiliateRepository();
$affiliateRepository->save(new Affiliate());

I am expecting GenericRepository to take care on the save action.

but I'm getting the following error:

Declaration of App\Services\AffiliateRepository::save(App\Models\Affiliate $affiliate): int should be compatible with App\Services\GenericRepository::save(App\Models\BaseModel $model): int

Why is that? Affiliate inherits from BaseModel.
Whats the best way to overcome that and let GenericRepository handle the save function call.

thanks

  • 写回答

3条回答 默认 最新

  • dousuowu4610 2017-04-03 06:41
    关注

    Look at methods:

    // GenericRepository
    public function save(BaseModel $model)
    
    // IAffiliateRepository
    public function save(Affiliate $affiliate) : int;
    

    Both classes have to expect the same type. If you implement IAffiliateRepository into GenericRepository class, it will be correct. You may also need to change variable names to be the same.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计