PHPStorm 类型提示基类的子类
PHPStorm type hinting subclasses of baseclass
关于这个post:
In PHPStorm, how can I make type hinting work when I have a superclass method that returns a different type from each subclass,
这是关于 PHPStorm 类型提示中的一个边缘案例。
请尝试跟进 - 我会尽我所能尽可能清楚:
所以,我得到了这个基础摘要 class:
abstract class myBaseController {
protected $_model;
...
}
另一个 class 继承自:
class myController extends myBaseController {
$hello = 'hello';
...
}
并且进一步扩展了三分之一 class:
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:
class myModel extends BaseModel {
$world = 'world';
public function form($my_variable) {
do_something();
}
我真正的问题是如何正确"phpdoc"这个场景:
A subclass myNewController
正在使用继承变量 _model
分配另一个 class myModel
的实例一个独特的功能 form
。 PHPStorm 应该如何正确地找到 myNewController
中的 form
?
到目前为止,我的解决方案包括像这样记录 myBaseController
:
abstract class myBaseController {
/**
* @var object
*/
protected $_model;
...
}
但是我认为 @var object
过于宽泛(PHPStorm 找不到它的声明),我的猜测是应该有更好(更具体)的方法来做到这一点。
也许我们可以改为:
/**
* @var BaseModel
*/
如果 PHPStorm 有办法查看该方法的子classes。
有什么想法吗?
提前谢谢大家。
要记录 class 方法的 return,请使用 return $this
; return static
也有效
虽然这可能不是最佳做法,但它肯定适合您。
您可以 "override" 子类中的 _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
关于这个post:
In PHPStorm, how can I make type hinting work when I have a superclass method that returns a different type from each subclass,
这是关于 PHPStorm 类型提示中的一个边缘案例。 请尝试跟进 - 我会尽我所能尽可能清楚:
所以,我得到了这个基础摘要 class:
abstract class myBaseController {
protected $_model;
...
}
另一个 class 继承自:
class myController extends myBaseController {
$hello = 'hello';
...
}
并且进一步扩展了三分之一 class:
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:
class myModel extends BaseModel {
$world = 'world';
public function form($my_variable) {
do_something();
}
我真正的问题是如何正确"phpdoc"这个场景:
A subclass myNewController
正在使用继承变量 _model
分配另一个 class myModel
的实例一个独特的功能 form
。 PHPStorm 应该如何正确地找到 myNewController
中的 form
?
到目前为止,我的解决方案包括像这样记录 myBaseController
:
abstract class myBaseController {
/**
* @var object
*/
protected $_model;
...
}
但是我认为 @var object
过于宽泛(PHPStorm 找不到它的声明),我的猜测是应该有更好(更具体)的方法来做到这一点。
也许我们可以改为:
/**
* @var BaseModel
*/
如果 PHPStorm 有办法查看该方法的子classes。
有什么想法吗? 提前谢谢大家。
要记录 class 方法的 return,请使用 return $this
; return static
也有效
虽然这可能不是最佳做法,但它肯定适合您。
您可以 "override" 子类中的 _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