所以我有一个 trait ,如下所示:
trait RepositoryTrait
{
/**
* Find a model by its primary key.
*
* @param int $id
* @param array $columns
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function find($id, array $columns = ['*'])
{
return $this->query()->find($id, $columns);
}
}
和界面:
interface Repository
{
/**
* Find a model by its primary key.
*
* @param int $id
* @param array $columns
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function find($id, array $columns = ['*']);
}
我有像以下那样的存储库类:
class FixedAssetRepository implements Repository
{
use RepositoryTrait;
/**
* FixedAsset model.
*
* @var FixedAsset
*/
protected $model;
/**
* Repository constructor.
*
* @param FixedAsset $fixedAsset
*/
public function __construct(FixedAsset $fixedAsset)
{
$this->model = $fixedAsset;
}
}
我正在寻找的是以某种方式定义方法find
(在特征或接口中)是FixedAsset
的类型 - 但这应该始终适用于每个新的Repository
类我将创建(实现Repository接口)。
我需要在 PhpStorm 10.0.4
中进行类型提示有可能吗?
所以结果应该是当我在某个地方打电话时:。
$fixedAsset = $this->fixedAssetRepositry->find($id);
PhpStorm会知道$fixedAsset
是一个类FixedAsset
的对象,而不仅仅是\Illuminate\Database\Eloquent\Model
(现在就是这样)。
所以我需要在界面(或特征?)中喜欢的东西:
/**
* Find a model by its primary key.
*
* @param int $id
* @param array $columns
* @return $this->model
*/
public function find($id, array $columns = ['*']);
但当然@return $this->model
不起作用。
对于有关此事的任何建议,我将不胜感激。
答案 0 :(得分:1)
我现在能想到的唯一解决方案是在@method
类的PHPDoc评论中使用FixedAssetRepository
,并且#34;重新声明"具有正确签名的find()
方法(返回类型)。由于它是PHPDoc解决方案,因此在运行时不会对PHP代码产生任何影响。
示例代码:
/**
* @method FixedAsset find(int $id, array $columns) Find a model by its primary key
*/
class FixedAssetRepository implements Repository
{
...
有关@method
代码的更多信息 - https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md#711-method