PHPDoc @return类型等于类字段类型(在PhpStorm 10.0.4中)

时间:2016-09-28 20:24:06

标签: laravel phpstorm phpdoc

所以我有一个 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不起作用。

对于有关此事的任何建议,我将不胜感激。

1 个答案:

答案 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