91

只是好奇netbeans中是否有办法为常规变量提供类型提示,以便智能感知将其拾取。我知道您可以对类属性、函数参数、返回类型等执行此操作,但我不知道如何对常规变量执行此操作。在您拥有可以返回不同对象类型的方法(例如服务定位器)的情况下,这将非常有用。

例如:

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

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

4

6 回答 6

191

您只需要一行:

/* @var $varName Type_Name */

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

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

  • 单个星号(/*而不是/**)。
  • 将类型放在变量名之后。
  • 在类型提示之前和之后什么都没有(除了空格,但是当注释不在一行中时,即使这样也是不允许的)。
于 2009-11-25T17:57:47.537 回答
24

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

**请注意,虽然它必须在单行上,并且以这种风格明确地打开和关闭......

/* @var $varName Type_Name */

没有其他格式是否...

/**
 * @var $varName Type_Name
 */ 

或者...

// @var $varName Type_Name

似乎完全有效。希望对某人有所帮助。

于 2012-09-04T20:00:32.853 回答
10

你想记录那些讨厌的魔法变量吗?(我做到了;这个问题目前在谷歌中排名最高。我希望这对某人有帮助!)

@property标签允许您记录神奇的 php 变量 - 使用__get()和实现的那些__set()。该标签应在类定义之前的文档中使用:

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

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

在此处输入图像描述

于 2016-05-11T10:37:39.683 回答
5

根据此错误报告, 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;

于 2018-01-27T10:58:20.800 回答
2

在 netbeans 8.0.2 中,vdoc模板为您提供:

/* @var $variable type */

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

/** @var objectType $varName */

我还没有真正看到股票vdoc模板的巨大用途,特别是对于将用作 PDO 或 PDOStatement 对象的类变量。

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

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */
于 2015-03-28T19:30:27.777 回答
0

对于 NetBeans IDE 8.2 语法如下:

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

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

于 2020-10-09T13:45:10.500 回答