基类的PHPStorm类型暗示子类
关于这个职位: , 这是关于PHPStorm类型暗示中的一个边缘情况。 请试着跟着我-我会尽我所能做到尽可能清楚: 我有一个基本的抽象类:基类的PHPStorm类型暗示子类,php,phpstorm,phpdoc,Php,Phpstorm,Phpdoc,关于这个职位: , 这是关于PHPStorm类型暗示中的一个边缘情况。 请试着跟着我-我会尽我所能做到尽可能清楚: 我有一个基本的抽象类: abstract class myBaseController { protected $_model; ... } 另一个类继承自哪个类: class myController extends myBaseController { $hello = 'hello'; ... } 并进一步扩展为第三级: class myN
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
正在使用继承变量\u model
来分配另一个类myModel
的实例,该类具有唯一的函数表单
。PHPStorm应该如何在myNewController
中正确查找form
?
到目前为止,我的解决方案包括像这样记录myBaseController
:
abstract class myBaseController {
/**
* @var object
*/
protected $_model;
...
}
然而,我认为@var object
太宽泛了(PHPStorm找不到它的声明),我猜想应该有更好(更具体)的方法来实现这一点
也许我们可以改为:
/**
* @var BaseModel
*/
如果PHPStorm有一种方法可以查看该方法的子类
有什么想法吗?
提前感谢大家。要记录类方法的返回,请使用
return$this
<代码>返回静态也有效虽然可能不是最佳实践,但这一方法肯定适用于您
您可以“覆盖”子类中的\u model
成员,并将其作为BaseModel的子类进行记录
// superclass
abstract class myBaseController {
/**
* @var BaseModel
*/
protected $_model;
...
}
// subclass
class myNewController extends myBaseController {
/**
* @var MyDerivedModel
*/
protected $_model;
...
}
您可以使用
@property
注释在子类中指定属性类型,而无需引入新代码:
/**
* @property myModel $_model
*/
class myNewController extends myController
试试:`/***@var$variableName ClassName*/`@lolka\u bolka如果我这样做,它会工作,但是
$\u model
会锁定到ClassName
<代码>$\u模型可以自由分配给我的任何模型类,每个模型类都可能有唯一的方法。因此,理想情况下,我应该从子类myNewController
中记录$\u model
。请您对下一票进行评论好吗?如果您想要继承类返回不同类型对象的功能,您可以强制执行getter方法,而不是直接访问成员$\u model
。基本上,您坚持使用抽象公共函数getModel()代码>在抽象类中。扩展它的每个类都实现该方法并返回特定类型的模型。您可以在扩展类中输入返回的对象类型。我认为这是唯一的方法,我不知道PHPStorm如何能够找出你所考虑的对象类型。@N.B.对。好啊虽然不需要走一圈,但效果很好。我想PHPStom可以通过查看BaseModel
的所有子类来计算出函数。。。如果我不使用@var object
而使用@var BaseModel
…谢谢!成功了!很高兴知道。我不知道这个@属性
注释。它确实有效,如果它没有引入任何新的代码/重组,我会接受你的答案。很高兴知道,没关系。这是我迄今为止最好的想法,但@fschmengler的答案确实要好得多。生活和学习!;)