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

Der*_*rDu 10 php arrays phpdoc code-documentation

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

通常,数组将按如下方式处理:

/** @var ClassName[] $Array */
$Array = array( $InstanceOfClassName,.. )
Run Code Online (Sandbox Code Playgroud)

但是我需要这样的东西:

/** @var ClassName[][] $Array */
$Array = array( 0 => array( $InstanceOfClassName,.. ) )
Run Code Online (Sandbox Code Playgroud)

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

lis*_*nko 24

PhpStorm允许使用双括号[] []来键入嵌套数组:

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

$doubleNestedArray[0][1]->getFileInfo(); // ->getFileInfo() is suggested by IDE
Run Code Online (Sandbox Code Playgroud)


ash*_*azg 6

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

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

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

/* @var $inner ClassName[] */
$inner = $outer[0];
Run Code Online (Sandbox Code Playgroud)

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

再说一次,这对于自动完成有多大帮助取决于IDE如何构建它.某些IDE可能知道ClassName []语法并推断从$ inner拉出的元素是ClassName,因此它可以显示其方法.但是,我不能说我已经看过任何 IDE那样做了.最多,看到IDE只是以最基本的形式(/* @var $var ClassName */)提供@var hack,这是一个延伸.

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