PHP (7.1) 继承问题

标签 php inheritance php-7

我有以下结构:

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/

相关文章:

php - 我如何在 CakePHP 中使用模型中的电子邮件组件?

php - Apache2 Ubuntu : Virtualhost redirects to localhost

java - 对子类实例使用父类(super class)类型

java - java中的多重继承: implementing interfaces

C++包含和重新定义类错误

php - PHP注意事项自定义格式

homebrew - php-cs-fixer 在 php 7.3 更新后停止工作

php - mbstring Ubuntu 14.04 依赖包冲突

php - 我可以用 javascript 验证然后用 php 处理吗?

php - 如果只有一行,SQL 拒绝删除行