自动完成动态声明的方法

时间:2016-05-19 11:03:27

标签: php phpstorm

如何让IDE注册此方法返回参数的实例?

所以我可以这样做:

Class::models()->getModel('newModel')->newModelMethodHere()?

代码有效,但PHPStorm中没有自动完成功能。

    /**
     * Returns the object of the model
     *
     * @var $this->_models[$model] $model
     * @param string object $model
     * @throws Exception
     * @return object
     */
    public function getModel($model)
    {
        if (array_key_exists($model, $this->_models) && class_exists($model) && is_object($this->_models[$model])
            && $this->_models[$model] instanceof $model) {
            if (is_a($this->_models[$model], $model)) {
                /* @var $this->_models[$model] $model */
                return ($this->_models[$model]);
            }
        }
        throw new Exception('Model ' . (string)$model . ' is not registered correctly.');
    }

3 个答案:

答案 0 :(得分:0)

您应该修复评论栏。返回应该澄清什么对象返回。

 /**
 * Returns the object of the model
 * ...
 * @return ModelNameClass
 */

答案 1 :(得分:0)

我不得不改变我的代码,但我设法让它工作:

namespace PHPSTORM_META {
    $STATIC_METHOD_TYPES = array(
       \ClassName::getModel('') => [
           "" == "@",
       ],
   );
}

在PHPStorm项目根目录下的新.phpstorm.meta.php文件中。

答案 2 :(得分:0)

方法getModel()可能会返回不同类型的对象,具体取决于提供的参数。虽然这不是一个好习惯,但有一个简单的技巧可以让PhpStorm帮助您完成自动完成:将getModel()返回的值存储到变量中并使用@var注释来告诉关于其类型的PhpStorm:

 /** @var newModel $model */
 $model = Class::models()->getModel('newModel');
 // Here PhpStorm will be able to help you with its auto-complete
 $model->newModelMethodHere()?