返回一个属性的子类的方法 @returns
P粉310931198
2023-08-29 23:28:05
<p>我有一个抽象类<code>Foo</code>和一个抽象构建器<code>FooBuilder</code></p>
<pre class="brush:php;toolbar:false;">abstract class Foo {
}
abstract class FooBuilder {
protected Foo $model;
/*** 返回类实例
*
* @return Model //正确的返回类型是什么??*/
public function get()
{
return $this->model;
}
}
</pre>
<p>我想在我的子构建器中使用<code>get()</code>方法,但IDE检测到返回类型是子类,而不是抽象的<code>Foo</code>。</p>
<pre class="brush:php;toolbar:false;">class Bar extends Foo {
}
abstract class BarBuilder {
public function __construct()
{
$this->model = new Bar();
}
}
$barBuilder = BarBuilder();
$bar = $barBuilder->get(); //类型是“Bar”,但IDE认为是“Foo”
</pre>
<p>有没有办法在PHPDoc中返回属性的静态类型而不是类?类似于<code>@return static($this->model)</code>?</p>
<p>一个例子是Laravel的Eloquent在<code>SomeModel::find()</code>中的用法。IDE知道类型可以是<code>SomeModel</code>。但<code>@return</code>只有<code>Model</code>。</p>
您应该在示例中使用Foo作为返回类型;但是为了好玩,您可以使用静态返回类型来确定子实例,如下所示