PHPStorm + PHPdoc - 我可以键入提示单个数组元素吗?

PHPStorm + PHPdoc - can I type hint individual array element?

我有:

$myarr['DB'] = new DB();
$myarr['config'] = new config();

我可以通过某种方式让 PHPStorm 知道这些密钥中到底有什么吗?现在我只看到提示变量和 class 属性,而不是数组键。

PhpStorm 尚未实现此功能。为 support array access 个功能请求投票。

你也可以试试silex idea plugin

对于任意数组,PHPStorm 不知道任何数组中使用的键,因此不提供提示。甚至可以证明 impossible 可靠地实现这样的功能,所以我认为你在这里运气不好。

收集自:

Whosebug Answer

您可以预先定义数组键,然后PHPStorm会建议它们(CTRLspace)

$my = array();
$my['qwe'] = '';
$my['asd'] = '';
$my['zxc'] = '';

$my['']// inside '' will be autosuggest

您也可以使用 phpdoc (CTRL+Q):

/**
 * keys:
 * <pre>
 * some_array   (array)
 * some_bool    (boolean)
 * some_double  (double)
 * some_nice_integer    (integer)
 * </pre>
 * @return array
 */
public function toArray(){
    // return some array
}
$obj = (object)[]; // Cast empty array to object

add properties:
$obj->x = 'some'
$obj->y = 'hints'

现在,PHPStorm,当输入 $obj-> ..... 提示 x 和 y

https://plugins.jetbrains.com/plugin/9927-deep-assoc-completion

图片来自插件的 github 仓库。我使用该插件并可以确认它按照描述执行。

迟到的答案,但情况已经改变。

根据2021.2 changelist,现在可以用一行注释定义简单数组的形状:

/**
 * @return array{id: int, name: string, object: \Of\Some\Class}
 */
function getArray(): array {...}

If there are object-like arrays in your code, you can now define their structure with this PHPDoc annotation: array{key: type, key: type, ...}.

PhpStorm provides code completion for such annotated arrays, reducing the time you spend on routine typing and protecting you from mistakes.

The support is limited to one-line array shape definitions. For larger structures, it is often better to use real objects and classes.

不幸的是,我还没有找到一种方法来定义多维数组的结构,如果能对这样的“形状”数组的列表进行注释就太好了...