关于如何使用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在不使用管道的情况下知道数组值类型?
答案 0 :(得分:-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
}