PHPDoc:嵌套数组中的类型提示(例如2维)

问题描述 投票:10回答:2

是否存在正确的方法来记录另一个维度内的数组中的值/对象?

通常,数组将被这样处理:

/** @var ClassName[] $Array */
$Array = array( $InstanceOfClassName,.. )

但是我需要这样的东西:

/** @var ClassName[][] $Array */
$Array = array( 0 => array( $InstanceOfClassName,.. ) )

这显然不起作用,那么正确的PHPDoc表示法是什么?

php arrays phpdoc code-documentation
2个回答
6
投票

[首先,了解@var的用法不是标准的phpDocumentor规范。这是不同的IDE尝试使“局部变量自动补全”成为可能的几种different方法之一。我知道Eclipse使用格式/* @var $varName \ClassName */。因此,请注意其他答案/建议。

我可以看到在二维数组中利用此IDE自动完成功能的唯一方法是稍后在reading第一维时使用另一个@var,尽管这确实需要将其放入变量中本身:

/* @var $outer array */
$outer = array( 0 => array($InstanceOfClassName,...));

/* @var $inner ClassName[] */
$inner = $outer[0];

$inner[0]-> (在这里期待ClassName方法的自动完成)

现在,这对于自动完成有多么有用取决于您IDE的构建方式。一些IDE可能知道ClassName []语法并推断出从$ inner中提取的元素是ClassName,因此可以显示其方法。但是,我不能说我已经看到any IDE做到了。最多,看到IDE只是以其最基本的形式(/* @var $var ClassName */)提供@var hack真是令人费解。

TL; DR:您的里程可能会有所不同,只是试图获得您所追求的一半:-)


24
投票

PhpStorm允许使用双括号[] []:]提示嵌套数组。

/** @var \SplFileInfo[][] $doubleNestedArray */
$doubleNestedArray = [[]];

$doubleNestedArray[0][1]->getFileInfo(); // ->getFileInfo() is suggested by IDE
© www.soinside.com 2019 - 2024. All rights reserved.