我正在使用存储库模式从数据库中获取数据。
这是我的基类:
class BaseRepository implements EloquentRepositoryInterface
{
protected $model;
public function __construct(Model $model)
{
$this->model = $model;
}
public function findOrFail($id): Model
{
try {
return $this->model->findOrFail($id);
} catch (\Exception $e) {
throw new \Exception($e);
}
}
}
它实现了这个接口:
interface EloquentRepositoryInterface
{
public function findOrFail($id): Model;
}
然后我有一个名为 的实体Item,它扩展了Model:
class Item extends Model
{
// ...
}
我想做的是创建一个 ItemRepositoryInterface:
interface ItemRepositoryInterface extends EloquentRepositoryInterface
{
public function findOrFail($id): Item;
}
但我无法更改接口签名... PhpStorm 告诉我这是不兼容的,所以我必须public function findOrFail($id): Item从接口中删除它。所以我$itemRepository->findOrFail()尊重 的签名EloquentRepositoryInterface。
这是我的 ItemRepository :
class ItemRepository extends BaseRepository implements ItemRepositoryInterface
{
// ...
}
是当我使用$itemRepository->findOrFail()
规格时告诉我它返回Model
是当我打电话时$itemRepository->findOrFail()
规格应该告诉我它正在返回Item
有没有办法有这种行为?就像保留 EloquentRepositoryInterface 内部的签名findOrFail()
并“覆盖”它的返回类型,而不必重写整个函数?
慕田峪9158850
婷婷同学_
猛跑小猪