关于这篇文章:
这是关于PHPStorm类型提示的边缘情况。 请尽量遵循 - 我会尽力做到尽可能清楚:
所以,我已经得到了这个基础抽象类:
abstract class myBaseController {
protected $_model;
...
}
另一个类继承自:
class myController extends myBaseController {
$hello = 'hello';
...
}
并由第三类进一步扩展:
class myNewController extends myController {
public $myvar;
$this->_model = new myModel();
...
public function myFunc(){
// !!form is underlined as: "Method 'form' not found in class"!!
$form = $this->_model->form($new_variable);
}
以下是myModel类的示例:
class myModel extends BaseModel {
$world = 'world';
public function form($my_variable) {
do_something();
}
我真正的问题是如何正确地对待" phpdoc"这种情况:
子类myNewController
正在使用继承变量_model
来分配另一个具有唯一函数myModel
的类form
的实例。 PHPStorm应如何在form
中正确了解myNewController
?
到目前为止,我的解决方案涉及记录myBaseController
这样:
abstract class myBaseController {
/**
* @var object
*/
protected $_model;
...
}
但是我觉得@var object
过于宽泛(PHPStorm很难找到它的声明),我的猜测是应该有一个更好(更具体)的方法来做到这一点。
也许我们可以这样做:
/**
* @var BaseModel
*/
如果PHPStorm有办法查看该方法的子类。
有什么想法吗? 提前谢谢大家。
答案 0 :(得分:8)
您可以使用@property
注释在子类中指定属性类型而不引入新代码:
/**
* @property myModel $_model
*/
class myNewController extends myController
答案 1 :(得分:1)
虽然这可能不是最好的做法,但这个肯定对你有用。
你可以"覆盖"子类中的_model
成员,并将其作为BaseModel的子类记录。
// superclass
abstract class myBaseController {
/**
* @var BaseModel
*/
protected $_model;
...
}
// subclass
class myNewController extends myBaseController {
/**
* @var MyDerivedModel
*/
protected $_model;
...
}
答案 2 :(得分:-1)
要记录类方法的返回,请使用return $this
; return static
也有效