php / phpDoc - @возвращает экземпляр $this класса?
как отметить метод как "возвращает экземпляр текущего класса" в моем phpDoc?
в следующем примере моя IDE (Netbeans) увидит, что setSomething всегда возвращает
4 ответов
обновление:
начиная с Netbeans 7.4, IDE поддерживает @return self, static и this (http://wiki.netbeans.org/NewAndNoteworthyNB74#Editor_2).
class foo {
protected $_value = null;
/**
* Set something
*
* @param string $value the value
* @return this
*/
public function setSomething($value) {
$this->_value = $value;
return $this;
}
}
class bar extends foo {
public function someOtherMethod(){}
}
Предыдущий Ответ:
у нас есть аналогичная проблема с записью итератора current()
метод. Поскольку итератор расширен для многих разных классов, нет смысла иметь @return $class
связанные с ним. Мы использовали Вариант 2 @satrun77 раньше, но я использовал @method
С некоторым успехом в Netbeans.
class foo {
protected $_value = null;
/**
* Set something
*
* @param string $value the value
* @return foo
*/
public function setSomething($value) {
$this->_value = $value;
return $this;
}
}
/**
* @method bar setSomething($value)
*/
class bar extends foo {
public function someOtherMethod(){}
}
думал, что я вернусь к этому Q, когда наткнусь на пару вещей.
В настоящее время" return $this " не поддерживается, но есть запрос PhpDoc, чтобы добавить именно это в v1.5:
http://pear.php.net/bugs/bug.php?id=16223
в Eclipse PDT Также есть запрос на это:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=276082
оба являются относительно старыми запросами. Я не собираюсь становиться слишком взволнован тем, что это будет реализовано в ближайшее время, но здесь идет надежда :) тем временем, похоже, нет правильного решения этой проблемы.
здесь 3 обойти: (Это просто работа вокруг. классы не должны быть разработаны и реализованы, чтобы подать в суд на поведение IDE)
Вариант 1: сделайте метод someOtherMethod абстрактным или пустым методом в классе foo
class foo implements ifoo {
protected $_value = null;
/**
* Set something
*
* @param string $value the value
* @return ifoo
*/
public function setSomething($value) {
$this->_value = $value;
return $this;
}
// abstract method or create empty method if you want the method to be
// to be optional
abstract function someOtherMethod();
}
Вариант 2:
переопределить метод setSomething в классе bar
class bar extends foo {
/**
*
* @param <type> $value
* @return bar
*/
public function setSomething($value) {
return parent::setSomething($value);
}
public function someOtherMethod(){}
}
Вариант 3: Интерфейс
interface ifoo {
public function someOtherMethod(){}
}
class foo {
protected $_value = null;
/**
* Set something
*
* @param string $value the value
* @return ifoo
*/
public function setSomething($value) {
$this->_value = $value;
return $this;
}
}
class bar extends foo implements ifoo {
public function someOtherMethod(){}
}
синтаксис phpDoc позволяет определять несколько типов, разделяя их с помощью |
символ @return
tag. Когда вы расширяете class foo
С class bar
вы должны написать новый тег phpDoc, который имеет надлежащий класс для @return
.
если функция возвращает значение foo
или bar
затем вы должны использовать @return foo|bar
.
однако в вашем случае просто определите @return bar
для переопределения функции.
позаботиться.