Methoden, die eine Unterklasse einer Eigenschaft @returns zurückgeben
P粉310931198
2023-08-29 23:28:05
<p>Ich habe eine abstrakte Klasse <code>Foo</code> und einen abstrakten Builder <code>FooBuilder</code></p>
<pre class="brush:php;toolbar:false;">abstract class Foo {
}
abstrakte Klasse FooBuilder {
protected Foo $model;
/*** Klasseninstanz zurückgeben
*
* @return Model //Was ist der richtige Rückgabetyp? ?*/
öffentliche Funktion get()
{
return $this->model;
}
}
</pre>
<p>Ich möchte die Methode <code>get()</code> in meinem untergeordneten Builder verwenden, aber die IDE erkennt, dass der Rückgabetyp eine Unterklasse und kein abstrakter <code>Foo</code> ist. . </p>
<pre class="brush:php;toolbar:false;">class Bar erweitert Foo {
}
abstrakte Klasse BarBuilder {
öffentliche Funktion __construct()
{
$this->model = new Bar();
}
}
$barBuilder = BarBuilder();
$bar = $barBuilder->get(); //Der Typ ist „Bar“, aber die IDE denkt, es sei „Foo“
</pre>
<p>Gibt es in PHPDoc eine Möglichkeit, den statischen Typ einer Eigenschaft anstelle der Klasse zurückzugeben? Ähnlich wie <code>@return static($this->model)</code>? </p>
<p>Ein Beispiel ist die Verwendung von Laravel's Eloquent in <code>SomeModel::find()</code>. Die IDE weiß, dass der Typ <code>SomeModel</code> sein kann. Aber <code>@return</code> hat nur <code>Model</code>. </p>
您应该在示例中使用Foo作为返回类型;但是为了好玩,您可以使用静态返回类型来确定子实例,如下所示