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

Mat*_*son 7 php phpstorm

我有一个继承自超类的类,其中超类具有静态find()方法,该方法实例化子类的实例(活动记录模式).

class ActiveRecordClass {

    /**
     * @return mixed
     */
    public static function find() {
        // Code returns instance of called class
    }
}

class ModelClass extends ActiveRecordClass {

}

// returns instance of ModelClass, but PHPStorm doesn't realise
ModelClass::find($model_id); 
Run Code Online (Sandbox Code Playgroud)

目前,docblock对于代码完成和类型提示并不是很好.我不能使用超类作为返回类型,因为子类由于DB列而具有不同的方法.

如何向PHPStorm指示超类find()方法返回它所调用的子类的实例,以便代码完成有效?

Mat*_*son 8

找到了:

class ActiveRecordClass {

    /**
     * @return static
     */
    public static function find() {
        // Code returns instance of called class
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎@return selfvs的@return static工作方式与关键字通常所做的相同.@return self没有选择具体子类上可用的方法,但@return static使自动完成功能很好.

  • 我在PHPStorm 8尝试了这个技巧 - 它不起作用(( (3认同)
  • 如果我没记错的话,我一直在phpstorm 7中使用@return static关键字,但它在php storm 2016中停止提供正确的自动完成功能. (2认同)