我有以下结构:
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());
我希望 GenericRepository
负责保存操作。
但我收到以下错误:
App\Services\AffiliateRepository::save(App\Models\Affiliate $affiliate) 声明:int
应该兼容
App\Services\GenericRepository::save(App\Models\BaseModel $模型): int
这是为什么呢? Affiliate
继承自 BaseModel
。
克服这个问题并让 GenericRepository
处理 save
函数调用的最佳方法是什么。
谢谢
最佳答案
看方法:
// GenericRepository
public function save(BaseModel $model)
// IAffiliateRepository
public function save(Affiliate $affiliate) : int;
两个类都需要相同的类型。如果将 IAffiliateRepository
实现到 GenericRepository
类中,它将是正确的。您可能还需要将变量名称更改为相同。
关于PHP (7.1) 继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177875/