PHPDoc:嵌套数组中的Typehint(例如2维)

时间:2013-12-12 12:04:18

标签: php arrays phpdoc code-documentation

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

通常会像这样处理数组:

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

但我需要这样的事情:

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

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

2 个答案:

答案 0 :(得分:23)

PhpStorm允许使用双括号[] []:

输入提示嵌套数组
/** @var \SplFileInfo[][] $doubleNestedArray */
$doubleNestedArray = [[]];

$doubleNestedArray[0][1]->getFileInfo(); // ->getFileInfo() is suggested by IDE

答案 1 :(得分:6)

首先,要了解@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 hack,这是一段时间。

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