这个问题一直困扰着我多年。我的英语不那么流利,有点难以解释,所以请耐心等待。
由于我是一个懒惰的程序员,我使用Netbeans IDE,因为我喜欢代码完成。为了让Netbeans提示我正确的属性和方法(并且仅仅因为我认为这是一个好习惯),我在每个方法或属性上面添加一个不错的PHPdoc块,如下所示:
/**
* My method
*
* Some explanation that will show up as a hint,
* perhaps even with a <code>Example</code
*
* @param bool $flag
* @return self
*/
public function doSomething($flag) {
...
return $this;
}
这很好用,在完成代码时我得到了我的期望,直到我开始扩展类。例如
abstract class Parent {
/**
* @return self
*/
public function parentMethod() {
...
return $this
}
}
class Child extends Parent {
/**
* @return self
*/
public function childMethod() {
...
return $this
}
}
如果我现在说
new Child()->
Netbeans会建议父母和孩子的方法。如果我那么
new Child()->childMethod()->
我仍然会从Child和Parent获得所有方法。
只要我使用返回自身的方法,并且只是 在Parent类上声明,我只会得到建议 在Parent类上实现的方法。
所以继续这个例子,如果我这样做
new Child()->parentMethod()->
我只会将parentMethod
作为类型提示,而childMethod
仍然可用,因此也应该建议。
我在网上搜索过但找不到任何解决方法(@return $this
有完全相同的结果)。这是Netbeans中的错误,还是我做错了什么?有没有人为此找到解决方法(不在每行后添加@var
)?
(我目前在使用Netbeans 8.0的Mac OSX 10.9上工作,但使用Netbeans 7.2,7.3和7.4的OSX 10.7和10.8也存在同样的问题)