Обновлен ответ cvsguimaraes для включения статических опций:

инство PHP IDE используют phpdoc для получения подсказок о типе выражения. Тем не менее, я часто использую этот шаблон, который, кажется, не рассматривается:

class Control {
    private $label = '';

    /** @return ??? */
    public static function Make(){ return new static(); }

    /** @return ??? */
    public function WithLabel($value){  $this->label = $value;  return $this;  }

    /** @return void */
    public function Render(){ /* ... */ }
}

class Textbox extends Control {
   private $text = '';

    /** @return ??? */
    public function WithText($text){  $this->width = $text;  return $this;  }
}

Теперь я могу использовать такие классы:

Textbox::Make()           // <-- late static binding, returns Textbox
   ->WithLabel('foo')     // <-- late dynamic binding, returns Textbox
   ->WithText('bar')      // <-- normal binding, returns Textbox
   ->Render();

Есть ли способ заменить '???' на что-то, чтобы информация о наборе была правильной?

Ответы на вопрос(3)

Ваш ответ на вопрос