2016-09-28 6 views
0

Так у меня есть черта вроде как ниже:PHPDoc тип @return равен тип поля класса (в PhpStorm 10.0.4)

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, который я создам (который реализует интерфейс репозитория).

мне это нужно для типа намекая в 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

Лучший ** Я ** мог думать прямо сейчас, чтобы использовать '@ method' и "переобъявить" его правильный тип возврата - посмотрите, будет ли это работать. – LazyOne

+0

Отлично! Как просто ... Вот что мне нужно. Большое спасибо. Вы можете опубликовать этот ответ, чтобы я мог отметить его как решение. –

ответ

1

Единственное решение, которое я могу думать прямо сейчас будет использовать @method в PHPDoc комментарии для этого FixedAssetRepository класса и «переобъявить», что 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

Смежные вопросы