Netbeans(PHP)中的变量类型提示


85

只是好奇是否有一种方法可以在netbeans中为常规变量提供类型提示,以便intellisense可以选择。我知道您可以针对类属性,函数参数,返回类型等执行此操作,但是我不知道如何针对常规变量执行此操作。在您拥有可以返回不同对象类型的方法(例如服务定位器)的情况下,这确实有帮助。

例如:

/**
 * @var Some_Service $someService
 */
$someService = ServiceLocator::locate('someService');

之后使用$ someService的地方,netbeans将提供在Some_Service类中定义的所有可用方法。


1
对于成员来说,这在类内有效,但是我不知道如何在函数或过程代码中做到这一点。
David Snabel-Caunt 09年

1
我会考虑将其重命名为PHP IDE中的Variable类型提示,因为这种类型的注释应该在所有常见的IDE(NEtBeans,Eclipse等)中都可以使用。
shadyyx13年

Answers:


186

您只需要一行:

/* @var $varName Type_Name */

请参阅NetBeans PHP博客中的这篇文章:https : //blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

注意:至少在8.2版中;关键似乎是:

  • 单个星号(/*而不是/**)。
  • 将类型放在变量名之后。
  • 类型提示前后没有任何内容(空格除外,但是即使注释不在一行中,也不允许这样做)。

16
这里的关键似乎是单个星号/ *而不是/ **。至少在8.0版中。谢谢。
Cypher

1
如果我们需要对对象属性$this->obj = $serviceLocator->get('obj');使用/* @var $obj Obj */
vdoc

2
@shadyyx在这种情况下,您应该使用/** @var Type_Name */,看这篇文章
2015年

6
请记住,您可以vdoc在要记录的变量上方的行上键入内容,然后单击Tab,它将作为宏来自动创建上面的文档块@johannes。
Tom Auger

1
如果您还希望NetBeans也支持其他语法,请对功能请求进行评论/投票:netbeans.org/bugzilla/show_bug.cgi?
id=267470

24

我知道这是一个较旧的问题,但是我正在为Eclipse / Zend Studio寻找类似的答案,这也解决了它。

**请注意,尽管它必须在一行中,并且以这种样式显式地打开和关闭...

/* @var $varName Type_Name */

没有其他格式...

/**
 * @var $varName Type_Name
 */ 

要么...

// @var $varName Type_Name

似乎工作。希望能对某人有所帮助。


在NetBeans 7.2中,使用最后列出的双斜杠方法对我不起作用
David

1
@David可能读得不太好,但是我确实说过,只有第一个作品。尽管其他两个都是有效的注释,但是它们都不能与类型提示系统一起使用,至少就Eclipse而言,不确定NetBeans。
oucil 2013年

1
Netbeans(8.01)仅使用/ *接受第一个选项,但是phpStorm(8)也支持/ **。
Jop van Raaij 2014年

9

您是否要记录那些令人讨厌的魔术变量?(我做到了;该问题目前在Google中排名最高)。希望这对某人有帮助!)

@property标签可以让你记录魔术PHP变量-那些实施使用__get()__set()。标签应在类定义之前的文档中使用:

/**
 * Class Contact
 * @property string $firstName
 * @property string $lastName
 */
class Contact extends Model {
   ...

此表示法触发自动完成,并已在Netbeans 8.1和PhpStorm 2016.1中进行了测试。

在此处输入图片说明


3

根据此错误报告,语法将在NetBeans 9中更改:

/* @var $variable VarType */    // vdoc1 (legacy syntax)
/** @var VarType $variable */   // vdoc (new syntax)

另外,值得一提的是,您可以[]在类名后面附加以表示对象数组:

/* @var $foos Foo[] */
$foos = // ...

foreach ($foos as $foo) {
    // $foo will be hinted as Foo here
}

并且不要忘记您的use声明,例如use Foo;


2

在netbeans 8.0.2中,vdoc模板为您提供了以下功能:

/* @var $variable type */

但是,Netbeans无法识别此问题,并且不会为您提供对象的正确自动完成列表。而是在变量声明之前使用它:

/** @var objectType $varName */

我还没有真正看到stock vdoc模板的大用处,尤其是对于将用作PDO或PDOStatement对象的类变量。

我使用的一种解决方案实际上是进入“工具” /“选项” /“编辑器” /“代码模板”(选择PHP作为您的语言),并添加一个新的模板。我叫我的提示。然后在“扩展文本”下,使用以下模板:

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */

3
嗯,我有NB 8.0.2,对我来说却是另一回事。/ * @var $ variable类型* /可以正常工作。我确实尝试过将您的补丁用于模板。但这没用。
userfuser 2015年

1
我不确定我第一次发布此答案时的netbeans副本到底发生了什么,但现在使用的是8.2。/ * @var $ varName varType * /可以正常工作。
迈克(Mike)

0

对于NetBeans IDE 8.2,语法如下:

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

这将至少为静态变量正确提供类型提示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.