Jak oznaczyć metodę jako "zwraca wystąpienie bieżącej klasy" w moim phpDoc?
W poniższym przykładzie mój IDE (Netbeans) zobaczy, że setSomething zawsze zwraca obiekt foo
.
Ale to nie jest prawda, jeśli rozciąłem obiekt - zwróci on $this
, który w drugim przykładzie jest obiektem bar
, a nie obiektem foo
.
class foo {
protected $_value = null;
/**
* Set something
*
* @param string $value the value
* @return foo
*/
public function setSomething($value) {
$this->_value = $value;
return $this;
}
}
$foo = new foo();
$out = $foo->setSomething();
So Fine - setSomething
zwraca foo
- ale w poniższym przykładzie zwraca bar
..:
class bar extends foo {
public function someOtherMethod(){}
}
$bar = new bar();
$out = $bar->setSomething();
$out->someOtherMethod(); // <-- Here, Netbeans will think $out
// is a foo, so doesn't see this other
// method in $out's code-completion
... Byłoby wspaniale rozwiązać to jak dla mnie, Ukończenie kodu to ogromne przyspieszenie.
Ktoś ma sprytny trik, a może nawet lepszy, właściwy sposób udokumentowania tego za pomocą phpDoc?
To byłaby wina NetBeansa, ponieważ w PHP nie ma upcastingu i downcastingu obiektu. – BoltClock
Myślę, że jest to prawdopodobnie najbliższy odpowiedzi (tzn. Nie mogę tego zrobić bez jakiegoś okropnego kompromisu). Przypuszczam, że w Javie musiałbym podnieść wynik 'setSomething' do' bar' zanim mógłbym użyć 'someOtherMethod'. – ledneb