Méthodes qui renvoient une sous-classe d'une propriété @returns
P粉310931198
2023-08-29 23:28:05
<p>J'ai une classe abstraite <code>Foo</code> et un constructeur abstrait <code>FooBuilder</code></p>
<pre class="brush:php;toolbar:false;">classe abstraite Foo {
}
classe abstraite FooBuilder {
modèle Foo $ protégé ;
/*** Instance de classe de retour
*
* @return Model //Quel est le type de retour correct ? ?*/
fonction publique get()
{
return $this->model;
}
}
≪/pré>
<p>Je souhaite utiliser la méthode <code>get()</code> dans mon générateur enfant, mais l'EDI détecte que le type de retour est une sous-classe, et non un abstrait <code>Foo</code> ; . </p>
<pre class="brush:php;toolbar:false;">class Bar étend Foo {
}
classe abstraite BarBuilder {
fonction publique __construct()
{
$this->model = new Bar();
}
}
$barBuilder = BarBuilder();
$bar = $barBuilder->get(); //Le type est "Bar", mais l'EDI pense que c'est "Foo"
≪/pré>
<p>Existe-t-il un moyen dans PHPDoc de renvoyer le type statique d'une propriété au lieu de la classe ? Semblable à <code>@return static ($this->model)</code> ? </p>
<p>Un exemple est l'utilisation d'Eloquent de Laravel dans <code>SomeModel::find()</code>. L'EDI sait que le type peut être <code>SomeModel</code>. Mais <code>@return</code> n'a que <code>Model</code>. </p>
Vous devez utiliser Foo comme type de retour dans votre exemple mais pour vous amuser, vous pouvez utiliser un type de retour statique pour déterminer la sous-instance comme indiqué ci-dessous