PHPDoc: Typehint in matrici annidate (con es. 2 size)

Esiste un modo corretto per documentare valori / oggetti negli arrays che si trovano all'interno di un'altra dimensione?

Normalmente un arrays verrà gestito in questo modo:

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

Ma ho bisogno di qualcosa del genere:

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

Ovviamente non funziona, quindi qual è la notazione PHPDoc corretta?

Innanzitutto, comprendi che questo uso di @var non è una specifica standard di phpDocumentor. È uno dei molti modi in cui diversi IDE hanno cercato di rendere ansible il "completamento automatico delle variables locali". So che Eclipse utilizza il formato /* @var $varName \ClassName */ . Quindi tienilo a mente quando arrivano altre risposte / suggerimenti.

L'unico modo che posso vedere per sfruttare questo attacco di completamento automatico IDE con il tuo arrays bidimensionale è quello di utilizzare un altro @var in un secondo momento quando stai leggendo la prima dimensione, anche se questo richiede che entri in una variabile stessa:

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

$inner[0]-> (prevedi il completamento automatico dei methods ClassName qui)

Ora, ancora una volta, quanto può essere utile per l'autocompletamento dipende da come l'IDE l'ha costruito. Alcuni IDE potrebbero conoscere la syntax di ClassName [] e dedurre che un elemento estratto da $ inner è un ClassName e quindi può mostrare i suoi methods. Tuttavia, non posso dire di aver visto nessun IDE farlo ancora. Al massimo, è stato un tratto vedere gli IDE semplicemente avere l'hack @var disponibile nella sua forma più semplice ( /* @var $var ClassName */ ).

TL; DR: Il tuo chilometraggio può variare nel solo tentativo di get metà di quello che stai cercando 🙂

PhpStorm consente di digitare arrays di nidificati con doppie parentesi [] []:

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