phpDocでメソッドを「現在のクラスのインスタンスを返す」とマークするにはどうすればよいですか?
次の例では、IDE(Netbeans)ではsetSomethingが常にfoo
オブジェクトを返します。
しかし、オブジェクトを拡張すると、それは真実ではありません。$this
を返します.2番目の例では、foo
オブジェクトではないbar
オブジェクトです。
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();
だから、罰金 - foo
を返しsetSomething
- しかし、次の例では、それは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
...私のためとして、これを解決するために素晴らしいことです、コード補完は大幅に高速化されます。
これをphpDocで文書化するには、誰かが賢明なやり方をしています。 (これらは単に回避されているクラスは設計されており、IDEの行動を訴えるために実装されてはならない)
オプション1: 方法someOtherMethodが抽象的または空作るここで
PHPでは、アップキャストとダウンキャストの対象がないため、これはNetBeansの問題です。 – BoltClock
これはおそらく答えに最も近いと思います(つまり、恐ろしい妥協なしにこれを行うことはできません)。私はJavaで、 'someOtherMethod'を使う前に' setSomething'の結果を 'bar'にアップキャストしなければならないと思います。 – ledneb