【问题标题】:Explicit typing on property of instance显式键入实例的属性
【发布时间】:2021-12-07 01:14:59
【问题描述】:

为了帮助我的编辑器更好地理解我的代码,我有时需要添加这样的注释:

/* @var $container Container */

这项工作很好,但有时我需要这样的东西:

/* @var $this->container Container */

有这样的吗?

【问题讨论】:

  • 1) 那是什么语言?是 PHP 吗?您正在尝试使用 PHPDoc 制作类型提示? 2)如果这是 PHP——你在哪里尝试使用这样的文档注释:内联(在方法的中间)或在属性声明处?显示这一刻的示例代码将非常有帮助。
  • @LazyOne 这确实是PHP,这个注释在一个函数的中间。这是一个示例:``` $kcmClients = Client::getActiveEventPushClients(); foreach ($kcmClients as $client) { /* @var $client Client */ Client::setActiveClient($client, true); $remotePush = RemotePushModel::get(); if ($remotePush->isRunning()) { 继续; } /*其他代码*/ }``` 这里是关于这个manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/…的phpdoc文档的链接@
  • 我已经描述了 PHPDoc @var 标签的正确用法。在您的情况下(代码示例),使用 @var 是正常的,如果 Client::getActiveEventPushClients() 没有正确输入提示。尝试为该方法添加 @return Client[] ——它将为 PhpStorm 提供足够的信息以了解 $kcmClientsClient 实例的数组,它会自动找出 foreach 循环中 $client 的类型)。如果你可以编辑Client::getActiveEventPushClients()代码,当然……

标签: phpstorm jetbrains-ide phpdoc


【解决方案1】:

先说几件事:

1. PHPDoc cmets 以/** 开头。

出于兼容性原因,PhpStorm 也能理解普通 /* cmets 中的 PHPDoc 标签,但您最好为它们使用正确的符号。

2. 内联@var 标签的正确元素顺序可以在这里看到:
https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc-tags.md#517-var

/** @var [type] [element_name] [<optional description>] */

例如

/** @var Container $container */

就像 #1:PhpStorm 理解这样的 cmets,即使元素被交换(为了与其他(旧)IDE/旧代码兼容)。


您的实际问题:

内联 @var 只允许对局部/普通变量进行类型提示。您不能将其用于复合变量(此处不能使用 $this-&gt;container$someObject-&gt;someVar)。

这是错误的:

/* @var $this->container Container */

// even if it uses correct order/style
/** @var Container $this->container */

如果有的话:应该在实际类中提供此类类型提示,在实际属性声明上方(省略[element_name] 部分)https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc-tags.md#examples-15

class MyAwesomeClass
{
    /** @var Container Optional description here */
    protected $container;
    ...
}

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多