PhpStorm静态方法代码完成

amo*_*mow 6 php phpstorm laravel

我在我的php项目中使用Laravel ORM,并且在我的代码中使用了很多动态.例如

UserModel::whereName('Foo')->whereGender(1)->first();
Run Code Online (Sandbox Code Playgroud)

当我使用PhpStorm 2016.1(我认为)时,我可以通过执行以下操作将PHPDoc字符串添加到类UserModel以使代码完成whereName以及以下whereGender内容:

/**
* class UserModel
* @method static $this whereName($val)
* @method static $this whereGender($val)
*/
class UserModel {
 .......
}
Run Code Online (Sandbox Code Playgroud)

但在我升级到PhpStorm 2016.2.2的最新版本之后.第二种方法whereGender不会出现在代码完成列表中.在JetBrains网站上,我找到了2016.2的新功能

静态方法从完成列表中过滤掉.

我的问题是:有没有办法让PhpStorm whereGenderwhereName通话结束后完成?

更新:

必须调用两次完成才能获得静态方法. https://youtrack.jetbrains.com/issue/WI-9403#comment=27-1490430

Lio*_*han 3

长话短说:博士

\n\n

要查看完成情况,在键入 后->,您必须按CTRL + SPACE以查看包含静态方法的完整完成列表。如果您使用的是 Mac 并且它与您的语言切换冲突,请更改组合键:

\n\n
Preferences->Keymap:\nMain Menu->Code->Completion->Basic\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

虽然有一个实际的用例,但调用静态/非静态方法并不常见,因此 phpstorm 放弃了它,如下所述: https: //blog.jetbrains.com/phpstorm/2016/07/completion- phpstorm/中的更改

\n\n
\n

下一个完成更改是在 的上下文中调用完成时从完成列表中删除静态方法$this->。这一变化是由于几年前用户打开的一张票证而发生的。使用调用静态方法$this->是一个完全有效的用例,但在 PHP 中并未广泛使用。虽然这在当时看起来是个好主意,但它\xe2\x80\x99s 产生了意想不到的后果,使在 PHPUnit 中编写断言变得更加痛苦。

\n
\n\n

因此,无论您如何编写 phpdoc,phpstorm 都不会在“第一次调用”时将静态方法显示为实例方法。您需要再次手动调用它(使用 CTRL+空格键)才能看到它。这就是“第二次调用”的意思。

\n\n

资料来源:

\n\n\n