Как установить тип возвращаемого значения `static / self`? - PullRequest
0 голосов
/ 09 августа 2011

У меня есть основной класс и некоторые подклассы, у меня есть статический метод для возврата экземпляра

class dad{
    public function __construct($arg){
    }

    // it returns caller class'es object
    public static function get($arg){
        return new static($arg);
    }
}

class son exteneds dad{
    public function __construct($arg){
    }

    public function sonFunc(){

    }
}

class daughter extends dad{
    public function __construct($arg){
    }

    public function daughterFunc(){

    }
}

Теперь я хочу, чтобы среда IDE Netbeans знала, что son::get()-> должно быть автоматически компилировано son методами, а daughter::daughter()-> - daughter единицами

Возможно ли это? Или может быть есть какие-то обходные пути?
Я не хочу переопределять метод get() во всех подклассах.

1 Ответ

1 голос
/ 02 сентября 2011

Хотя я лично не подхожу к этой компоновке кода или к хаку "обманом IDE", способ заставить ваш код работать с автозаполнением (в Eclipse PDT Helios ... может быть, NetBeans будет действовать так же) (неправильно) использовать тег @method в docblocks класса для ваших двух дочерних классов:

/**
 * @method son get() returns a son
 */
class son extends dad{}
/**
 * @method daughter get() returns a daughter
 */
class daughter extends dad{}

В моем тестировании IDE этого было достаточно, чтобы автозаполнение распознало, что son :: get () вернет объект "son", в то время как дочерний :: get () вернет объект "дочерний".

Опять же, это неправильное использование намерения тега @method, но оно разрешает автозаполнение так, как вы просите.

...