PHPStorm类型提示基类的子类

kst*_*tis 10 php phpdoc phpstorm

关于这篇文章:

在PHPStorm中,当我有一个从每个子类返回不同类型的超类方法时,如何进行类型提示工作,

这个是关于PHPStorm类型提示的边缘情况.请尽量跟进 - 我会尽力让自己尽可能清楚:

所以,我有这个基础抽象类:

abstract class myBaseController {
    protected $_model;
    ...
}
Run Code Online (Sandbox Code Playgroud)

另一个类继承自:

class myController extends myBaseController {
    $hello = 'hello';
    ...
}
Run Code Online (Sandbox Code Playgroud)

并由第三类进一步扩展:

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); 
    }
Run Code Online (Sandbox Code Playgroud)

下面是myModel类的示例:

class myModel extends BaseModel {
    $world = 'world';
    public function form($my_variable) {
        do_something();
    }
Run Code Online (Sandbox Code Playgroud)

我真正的问题是如何正确"phpdoc"这种情况:

子类myNewController使用继承变量_model来分配myModel具有唯一函数的另一个类的实例form.PHPStorm应该如何正确了解formmyNewController

到目前为止我的解决方案涉及这样的记录myBaseController:

abstract class myBaseController {
    /**
     * @var object
     */
     protected $_model;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是我认为@var object太宽泛(PHPStorm不会发现它的声明),我的猜测是应该有一个更好(更具体)的方法来做到这一点.

也许我们可以这样做:

/**
 * @var BaseModel
 */
Run Code Online (Sandbox Code Playgroud)

如果PHPStorm有办法查看该方法的子类.

有任何想法吗?谢谢大家.

Fab*_*ler 8

您可以使用@property注释在子类中指定属性类型而不引入新代码:

/**
 * @property myModel $_model
 */
class myNewController extends myController
Run Code Online (Sandbox Code Playgroud)