【问题标题】:PhpStorm - How to type hint array key correctly?PhpStorm - 如何正确输入提示数组键?
【发布时间】:2020-03-01 16:37:14
【问题描述】:

关于如何使用 PhpDoc 注释数组键仍有一个悬而未决的问题:https://github.com/phpDocumentor/phpDocumentor2/issues/650

我尝试了以下符号:

/**
 * @return array<string, SomeClass>
 * @return SomeClass[string]
 */    
public function someMethod(): array { ... }

但 PhpStorm 似乎无法适当地解决这个问题,因此在使用例如 foreach内部对象未知:

foreach($obj->someMethod() as $some) {
   $some->methodOfSomeClass(); // PhpStorm -> Method not found
}

我知道我可以使用管道运算符:

@return array<string, SomeClass>|SomeClass[]

我也知道我可以输入提示变量:

/** @var SomeClass $obj */
$obj

但是有没有办法在不使用管道的情况下配置 PhpStorm 以了解数组值类型?

【问题讨论】:

标签: php arrays phpstorm phpdoc type-hinting


【解决方案1】:

在 PHP 中,您可以使用具有整数键的数字索引数组或具有字符串键的关联数组。由于动态类型,您可以将它们混合在一起,因此可以同时具有两种类型。

此外,在您的示例中,您使用的不是密钥而是值,这些都用ClassName[] 暗示。

/**
 * @return Class[]
 */
function getClasses(): array {
  return [new Class()];
}

通过这种打字,PHPStorm 将在 forEach 循环中提供有效的工具提示。 否则,您可以使用内联 @type 注释。

foreach ($objs as $obj) {
  /* @type Class $obj */
  $obj->someMethod(); //Is hinted
}

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 2015-12-08
    • 2021-11-18
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2021-01-02
    相关资源
    最近更新 更多