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


PHPDoc: Typehint in nested arrays (with e.g. 2 dimensions)

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

通常情况下,数组的处理方式如下:

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

但我需要这样的东西:

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

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

PhpStorm允许使用双括号[]对嵌套数组进行类型提示:

/** @var 'SplFileInfo[][] $doubleNestedArray */
$doubleNestedArray = [[]];
$doubleNestedArray[0][1]->getFileInfo(); // ->getFileInfo() is suggested by IDE

首先,要明白@var的这种用法不是标准的phpDocumentor规范。这是不同IDE试图使"局部变量的自动完成"成为可能的几种不同方式之一。我知道Eclipse使用/* @var $varName 'ClassName */格式。因此,当其他答案/建议出现时,请记住这一点。

我能看到的利用这个IDE自动完成破解二维数组的唯一方法是在稍后读取第一个维度时使用另一个@var,尽管这确实需要进入变量本身:

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

$inner[0]->(此处需要ClassName方法的自动完成)

同样,这对自动补全有多有用取决于IDE是如何构建的。一些IDE可能知道ClassName[]语法,并推断出从$inner中提取的元素是ClassName,因此它可以显示其方法。然而,我还不能说我见过任何IDE这样做。最多,看到IDE只是以最基本的形式(/* @var $var ClassName */)提供@var破解是一种延伸。

TL;DR:你的里程数可能会有所不同,只想得到你想要的一半:-)