PHPStorm + PHPDoc — 我可以输入提示单个数组元素吗?

问题描述 投票:0回答:8

我有:

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

我可以以某种方式让 PhpStorm 准确地知道这些键中的内容吗?现在我只看到变量和类属性的提示,而不是数组键。

php phpstorm phpdoc
8个回答
21
投票

迟到的答复,但事情已经改变了。

根据2021.2变更列表现在可以用一行注释定义简单数组的形状:

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

如果您的代码中有类似对象的数组,您现在可以使用以下 PHPDoc 注释来定义它们的结构:array{key: type, key: type, ...}。

PhpStorm 为此类带注释的数组提供代码补全,减少您花在日常打字上的时间并防止您出错。

支持仅限于单行数组形状定义。对于较大的结构,通常最好使用真实的对象和类。

不幸的是,我还没有找到一种方法来定义多维数组的结构,并且注释此类“形状”数组的列表会很棒......


5
投票

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

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


3
投票

您可以提前定义数组键,然后 PHPStorm 会建议它们(CTRL+空格)

$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
}

2
投票

根据https://youtrack.jetbrains.com/issue/WI-59083/recognize-use-of-list-with-array-shapes 现在甚至可以描述列表中的项目形状:

/**
 * @return array<int, array{id: int, name: string}>
 */
function getShapedArray(): array {...}

适用于 for 循环,但在以下情况下无法完成:

$array = getShapedArray();
$elementId = 2;
// No completion for name property.
$array[$elementId]['name'];

0
投票

该功能在 PhpStorm 中尚未实现。投票支持支持数组访问功能请求。

您也可以尝试silex idea 插件


0
投票

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

收集自:

Stackoverflow 答案


0
投票

这可以内联完成。自 2021 年起,phpStorm 中添加了数组形状

/* @var $myarr array{DB: DB, config: config}*/
$myarr['DB'] = new DB();
$myarr['config'] = new config();

-3
投票
$obj = (object)[]; // Cast empty array to object

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

现在,PHPStorm,当输入

$obj->
..... 提示 x 和 y

© www.soinside.com 2019 - 2024. All rights reserved.