【问题标题】:Variable type hinting in Netbeans (PHP)Netbeans (PHP) 中的变量类型提示
【发布时间】:2010-12-20 09:17:21
【问题描述】:

只是好奇 netbeans 中是否有办法为常规变量提供类型提示,以便智能感知能够识别它。我知道你可以为类属性、函数参数、返回类型等做到这一点,但我不知道如何为常规变量做到这一点。在您拥有可以返回不同对象类型的方法(例如服务定位器)的情况下,这将非常有用。

例如:

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

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

【问题讨论】:

  • 这适用于类内部,适用于成员,但我不知道如何在函数或程序代码中做到这一点。
  • 我会考虑将其重命名为 PHP IDE 中的变量类型提示,因为这种类型的注释应该适用于所有常见的 IDE(NEtBeans、Eclipse 等)。

标签: php phpdoc php-ide


【解决方案1】:

你只需要一行:

/* @var $varName Type_Name */

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

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

  • 单个星号(/* 而不是 /**)。
  • 将类型放在变量名之后。
  • 在类型提示之前和之后什么都没有 (除了空白,但即使这样也是不允许的 当注释不在一行中时)。

【讨论】:

  • 这里的关键似乎是单个星号 /* 而不是 /**。至少,在 8.0 版本中。谢谢。
  • 如果我们需要将 vdoc 用于对象属性,即$this->obj = $serviceLocator->get('obj');,如果我使用/* @var $obj Obj */,它似乎根本不起作用...
  • @shadyyx 在这种情况下你应该使用/** @var Type_Name */,看这个post
  • 请记住,您可以在要记录的变量上方的行中键入vdoc,然后点击Tab,这将充当自动创建文档块@johannes 帖子的宏以上。
  • 如果您希望 NetBeans 也支持替代语法,请对功能请求发表评论/投票:netbeans.org/bugzilla/show_bug.cgi?id=267470
【解决方案2】:

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

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

/* @var $varName Type_Name */

没有其他格式...

/**
 * @var $varName Type_Name
 */ 

或者……

// @var $varName Type_Name

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

【讨论】:

  • 在 NetBeans 7.2 中使用最后列出的双斜杠方法对我不起作用
  • @David 读起来可能不太好,但我确实说过只有第一个有效。尽管其他两个都是有效的 cmets,但它们都不能与类型提示系统一起使用,至少就 eclipse 而言,不确定 NetBeans。
  • Netbeans (8.01) 只接受第一个选项,使用 /*,但 phpStorm (8) 也支持 /**。
【解决方案3】:

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

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

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

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

【讨论】:

    【解决方案4】:

    根据this bug reportNetBeans 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;

    【讨论】:

    • 这就是为什么。谢谢-这对我有用。
    【解决方案5】:

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

    /* @var $variable type */
    

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

    /** @var objectType $varName */
    

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

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

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

    【讨论】:

    • 嗯,我有 NB 8.0.2,对我来说正好相反。 /* @var $variable 类型 */ 工作正常。我确实尝试将您的补丁用于模板。但它没有用。
    • 当我第一次发布这个答案时,我不确定我的 netbeans 副本到底发生了什么,但我现在使用的是 8.2。 /* @var $varName varType */ 工作得很好。
    【解决方案6】:

    对于 NetBeans IDE 8.2 语法如下:

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2013-12-26
      • 2013-09-28
      • 2013-10-12
      • 2013-11-22
      • 1970-01-01
      • 2012-12-24
      • 2011-09-09
      • 2010-12-21
      相关资源
      最近更新 更多