私は次の構造を持っている:PHP(7.1)相続問題
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
を期待しています。
が、私は次のエラー取得しています:それはなぜ
Declaration of App\Services\AffiliateRepository::save(App\Models\Affiliate $affiliate): int should be compatible with App\Services\GenericRepository::save(App\Models\BaseModel $model): int
を? Affiliate
はBaseModel
を継承します。
これを克服し、がsave
関数呼び出しを処理する最善の方法を教えてください。方法で
おかげ
'GenericRepository :: save'のメソッドシグネチャが満たされていないためです。このメソッドは 'BaseModel'を受け入れることができると言っていますが、' IAffiliateRepository :: save'は 'Affiliate'インスタンスしか受け付けません。それは明らかに契約を破る。 – enricog
\ App \ Models \ Affiliateは\ App \ Models \ BaseModelの子孫ですか? – Imaginaroom
* "なぜ?アフィリエイトは' BaseModel'から継承しています。 "* - PHPはC++ではないため,--( – axiac