Netbeans 和 PHPStorm 中的变量类型提示
Posted
技术标签:
【中文标题】Netbeans 和 PHPStorm 中的变量类型提示【英文标题】:Variable type hinting in Netbeans and PHPStorm 【发布时间】:2014-09-14 08:24:09 【问题描述】:我在一家员工都使用 phpStorm 和 Netbeans 8 的公司工作。这对我们来说一直运行良好,直到我们最近开始为我们的代码添加更多类型提示。
在 PHPStorm 中,在源代码中使用类型提示的正确方法是这样的
/** @var MyAwesomeClass $theObject */
$theObject = $orm->getMyAwesomeObject();
这是有道理的,因为记录函数的正确方法是
/**
* @param MyAwesomeClass $awesomeObjectArgument
* @param boolean $booleanArgumentsAreSilly
*/
但是 netbeans 是这样工作的
/** @var $theObject \Full\Freeking\Namespace\With\Leading\Backslash\MyAwesomeClass */
这是一个问题,因为参数的顺序(@var 表示法)颠倒了,而且 Netbeans 使用 PHPStorm 不支持的前导斜杠。
有没有人知道一种方法来配置这些 IDE 中的任何一个以使用相同的标准,因为目前我们只有一半的代码具有工作自动完成功能。在我看来,Netbeans 中的实现似乎是不必要的,并且与 PHPDocs 标准(基于 @param 表示法)相冲突。
更新:我错了,PHPStorm 实际上与 Netbeans 表示法兼容,但反之则不然。这意味着我的问题没有完全解决。我仍然需要找到一种方法来配置两个 IDE 以生成适用于两者的文档。
【问题讨论】:
我不明白你在说什么,在 Netbeans (7.*, 8.*) 中,当你自动记录一个变量时(输入/**
然后按 ENTER,一行在变量之前),它会自动在下一行写入* @var type $variable
。当然,它理解代码提示的这种表示法......
【参考方案1】:
这是一个问题,因为参数的顺序(@var 表示法)颠倒了,而且 Netbeans 使用 PHPStorm 不支持的前导斜杠
这不是真的。
1. PhpStorm 支持两种订单(@var [type] [variable]
和 @var [variable] [type]
)
2. PhpStorm 支持 PHPDoc cmets (/** @var ...
) 以及普通块 cmets (/* @var ...
)
3. PhpStorm 支持 FQN - 这很好用:/** @var $theObject \Full\Namespace\MyAwesomeClass */
【讨论】:
你是对的,我错误地认为 PHPStorm 无法处理反向表示法。支持两者的 PHPStorm 解决了 PHPStorm 用户的问题,但不解决 netbeans 用户的问题。有什么办法可以改变 PHPStorm 的模板,让它像 netbeans 一样自动自动完成? “PHPStorm 支持这两种方式可以解决 PHPStorm 用户的问题,但不能解决 netbeans 用户的问题” -- 然后在任何地方使用与 netbeans 兼容的符号(如果您需要这种兼容性)。或者编写一些自定义脚本来查找此类不兼容的条目并交换顺序以使它们兼容。 “有什么办法可以改变 PHPStorm 的模板,让它像 netbeans 一样自动自动完成?” -- 所有可用于自定义的模板都位于 @987654329 @。如果您的情况没有 - 那么它不可用。您可以创建自定义实时模板并将其用于制作此类 PHPDoc cmets。 无论如何: PhpStorm 遵循 PHPDoc 标准,其他 IDE 的工作方式不同并不是 PhpStorm 的问题(尤其是因为 PhpStorm 支持“其他”方式)。 我注意到实际上没有关于使用@var
表示“局部变量”上的数据类型的“PHPDoc 标准”......这种做法在 IDE 中“在野外”开发,因此在实施上存在差异。 phpDocumentor 团队正在通过 PHP-FIG 将此用例包含在其针对 PHP 文档语法 (github.com/php-fig/fig-standards/pull/169) 提出的 PSR-5 标准中,尽管它指定了一个新的 @type
标签来替换 @var
。
@LazyOne @ashnazg,RFC 提案现在(2017 年 5 月)似乎几乎稳定,支持变量 php 文档的未来将类似于属性和常量:/** @var Type $var */
。 github.com/phpDocumentor/fig-standards/tree/master/proposed【参考方案2】:
尽管 ashazg 断言没有 PHPDoc 类型提示标准,http://phpdoc.org/docs/latest/references/phpdoc/tags/var.html 的官方文档确实说 typehint 应该在变量名之前,并且在文档中没有提到这个命令只是一个建议,任何人可以只使用他们自己的排序。
此外,这种做法与大多数其他强类型语言一致,例如 Java(公共 int 速度)或 C(int 速度)。因此,Netbeans 不支持 PHPDoc 文档中正确的类型提示顺序这一事实造成了很多痛苦。
【讨论】:
我的断言是“局部变量”。这些是您提供的文档链接中的类变量,它们总是可以按照标准进行记录。 OP 的问题完全是关于“局部变量”的,IDE 试图在标准之外解决它......因此不同的实现。 点了。然而,本地变量和类变量 PHPDoc 之间的不同标准(或缺乏标准)以及已经在上述语言中建立的标准语法确实/确实造成了很多痛苦。我希望 PSR-5 能解决这个问题。以上是关于Netbeans 和 PHPStorm 中的变量类型提示的主要内容,如果未能解决你的问题,请参考以下文章
php 用于Netbeans的Laravel IDE Helper / PhpStorm / Sublime Text 2 CodeIntel,使用https://github.com/barryvd