PHPDoc и позднее (статическое или динамическое) связывание

Большинство IDE PHP полагаются на 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();

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

16
задан linepogl 2 May 2011 в 13:56
поделиться