Kaedah yang mengembalikan subkelas sifat @returns
P粉310931198
P粉310931198 2023-08-29 23:28:05
0
1
527
<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>
P粉310931198
P粉310931198

membalas semua(1)
P粉107991030

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

class Foo
{
    /**
     * @return string
     */
    public function Iam(): string
    {
        return "hello";
    }
}

class Helper
{
    /**
     * Return the class instance
     *
     * @return static
     */
    public static function get(): static
    {
        return new self();
    }
}

class FooBuilder extends helper
{
    protected Foo $model;

    public function mememe()
    {
        echo "I am a method";
    }
}

class FooBuilder2 extends helper
{
    protected Foo $model;

    public function xray()
    {
        echo "I am a method";
    }
}

$test = FooBuilder::get();
$test->mememe();

$test2 = FooBuilder2::get();
$test2->xray();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan