返回一个属性的子类的方法 @returns
P粉310931198
P粉310931198 2023-08-29 23:28:05
0
1
526
<p>我有一个抽象类<code>Foo</code>和一个抽象构建器<code>FooBuilder</code></p> <pre class="brush:php;toolbar:false;">abstract class Foo { } abstract class FooBuilder { protected Foo $model; /*** 返回类实例 * * @return Model //正确的返回类型是什么??*/ public function get() { return $this->model; } } </pre> <p>我想在我的子构建器中使用<code>get()</code>方法,但IDE检测到返回类型是子类,而不是抽象的<code>Foo</code>。</p> <pre class="brush:php;toolbar:false;">class Bar extends Foo { } abstract class BarBuilder { public function __construct() { $this->model = new Bar(); } } $barBuilder = BarBuilder(); $bar = $barBuilder->get(); //类型是“Bar”,但IDE认为是“Foo” </pre> <p>有没有办法在PHPDoc中返回属性的静态类型而不是类?类似于<code>@return static($this->model)</code>?</p> <p>一个例子是Laravel的Eloquent在<code>SomeModel::find()</code>中的用法。IDE知道类型可以是<code>SomeModel</code>。但<code>@return</code>只有<code>Model</code>。</p>
P粉310931198
P粉310931198

全部回复(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();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板