我有:
$myarr['DB'] = new DB();
$myarr['config'] = new config();
我可以以某种方式让 PhpStorm 准确地知道这些键中的内容吗?现在我只看到变量和类属性的提示,而不是数组键。
迟到的答复,但事情已经改变了。
根据2021.2变更列表现在可以用一行注释定义简单数组的形状:
/**
* @return array{id: int, name: string, object: \Of\Some\Class}
*/
function getArray(): array {...}
如果您的代码中有类似对象的数组,您现在可以使用以下 PHPDoc 注释来定义它们的结构:array{key: type, key: type, ...}。
PhpStorm 为此类带注释的数组提供代码补全,减少您花在日常打字上的时间并防止您出错。
支持仅限于单行数组形状定义。对于较大的结构,通常最好使用真实的对象和类。
不幸的是,我还没有找到一种方法来定义多维数组的结构,并且注释此类“形状”数组的列表会很棒......
https://plugins.jetbrains.com/plugin/9927-deep-assoc-completion
来自插件 github 存储库的图像。我使用该插件并可以确认它按照描述执行。
您可以提前定义数组键,然后 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
}
根据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'];
该功能在 PhpStorm 中尚未实现。投票支持支持数组访问功能请求。
您也可以尝试silex idea 插件。
这可以内联完成。自 2021 年起,phpStorm 中添加了数组形状。
/* @var $myarr array{DB: DB, config: config}*/
$myarr['DB'] = new DB();
$myarr['config'] = new config();
$obj = (object)[]; // Cast empty array to object
add properties:
$obj->x = 'some'
$obj->y = 'hints'
现在,PHPStorm,当输入
$obj->
..... 提示 x 和 y