Methoden, die eine Unterklasse einer Eigenschaft @returns zurückgeben
P粉310931198
P粉310931198 2023-08-29 23:28:05
0
1
513
<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>
P粉310931198
P粉310931198

Antworte allen(1)
P粉107991030

您应该在示例中使用Foo作为返回类型;但是为了好玩,您可以使用静态返回类型来确定子实例,如下所示

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();
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!