PhpStorm - 如何正确输入提示数组键?
Posted
技术标签:
【中文标题】PhpStorm - 如何正确输入提示数组键?【英文标题】:PhpStorm - How to type hint array key correctly? 【发布时间】: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 以了解数组值类型?
【问题讨论】:
当该数组元素将被使用时(当分配给某个变量时)使用@var
内联 - 请参阅 Code Spirit 答案.. 或尝试 deep-assoc-completion 插件(它允许对数组参数/返回进行详细描述)--github.com/klesun/deep-assoc-completion/blob/master/README.md
"array在 PHP 中,您可以使用具有整数键的数字索引数组或具有字符串键的关联数组。由于动态类型,您可以将它们混合在一起,因此可以同时具有两种类型。
此外,在您的示例中,您使用的不是密钥而是值,这些都用ClassName[]
暗示。
/**
* @return Class[]
*/
function getClasses(): array
return [new Class()];
通过这种打字,PHPStorm 将在 forEach 循环中提供有效的工具提示。
否则,您可以使用内联 @type
注释。
foreach ($objs as $obj)
/* @type Class $obj */
$obj->someMethod(); //Is hinted
【讨论】:
以上是关于PhpStorm - 如何正确输入提示数组键?的主要内容,如果未能解决你的问题,请参考以下文章