首頁  >  問答  >  主體

傳回一個屬性的子類別的方法 @returns

<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粉310931198P粉310931198439 天前516

全部回覆(1)我來回復

  • P粉107991030

    P粉1079910302023-08-30 21:49:39

    您應該在範例中使用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();

    回覆
    0
  • 取消回覆