Kaedah yang mengembalikan subkelas sifat @returns
P粉310931198
2023-08-29 23:28:05
<p>Saya mempunyai kelas abstrak <code>Foo</code> dan pembina abstrak <code>FooBuilder</code></p>
<pre class="brush:php;toolbar:false;">abstract class Foo {
}
kelas abstrak FooBuilder {
dilindungi Foo $model;
/*** Kembalikan contoh kelas
*
* @return Model //Apakah jenis pulangan yang betul? ?*/
fungsi awam get()
{
pulangkan $this->model;
}
}
</pra>
<p>Saya mahu menggunakan kaedah <code>get()</code> dalam pembina anak saya, tetapi IDE mengesan bahawa jenis pulangan ialah subkelas, bukan <code>Foo</code> ; . </p>
<pre class="brush:php;toolbar:false;">class Bar memanjangkan Foo {
}
kelas abstrak BarBuilder {
fungsi awam __construct()
{
$this->model = new Bar();
}
}
$barBuilder = BarBuilder();
$bar = $barBuilder->get(); //Jenisnya ialah "Bar", tetapi IDE menganggapnya "Foo"
</pra>
<p>Adakah terdapat cara dalam PHPDoc untuk mengembalikan jenis statik harta dan bukannya kelas? Serupa dengan <code>@return static($this->model)</code>? </p>
<p>Contohnya ialah penggunaan Laravel's Eloquent dalam <code>SomeModel::find()</code>. IDE mengetahui bahawa jenis itu boleh menjadi <code>SomeModel</code>. Tetapi <code>@return</code> hanya mempunyai <code>Model</code>. </p>
Anda harus menggunakan Foo sebagai jenis pulangan dalam contoh anda; tetapi untuk keseronokan anda boleh menggunakan jenis pulangan statik untuk menentukan sub-contoh seperti yang ditunjukkan di bawah