2016-09-07 3 views
0

J'ai une classe qui étend ArrayObjectvariable phpdoc de classe ArrayObject

class Collection extends ArrayObject

Je sais que je peux définir tableau d'objets en utilisant ce code:

/* @var $userArray Model_User[] */

Mais comment puis-je définir variable $userArray en tant que tableau personnalisé de classe Collection qui contient des objets de classe Model_User? Sans modification class Collection ou son phpdoc. Je veux utiliser le même class Collection pour différents tableaux d'objets.

Ce n'est pas la même chose que PHPDoc type hinting for array of objects?, parce que dans cette discussion du sujet est liée à des réseaux communs en php, qui sont phpdoced comme /* @var $userArray Model_User[] */ en attendant ma question concerne tableau de génération personnalisée qui, si au-dessus phpdoced ma méthode ne sera pas tapez les méthodes hint de la classe de tableau de génération personnalisée, comme si $userArray->echoChanges() car il pensera que c'est un tableau commun, pas un tableau de classe Collection. Et oui $userArray agit également comme un tableau, donc il devrait taper le contenu du tableau indice $userArray[3]->name.

+0

Copie possible de [type PHPDoc indiquant un tableau d'objets?] (Http://stackoverflow.com/questions/778564/phpdoc-type-hinting-for-array-of-objects) –

+0

pas même proche, mon tableau peut avoir ses propres fonctions, comme $ userArray-> resetChanges(), donc il doit taper + hint + agit aussi comme un tableau $ userArray [4] -> name et il doit aussi taper hint. – YuraV

+0

En d'autres termes ce que vous demandez est: où '$ x = [nouveau nom()];' alors '/ * @var $ x Nom [] * /' so '$ y = nouvelle collection ([nouveau nom()]]); 'then'/* @var $ y? */' –

Répondre

0

PSR-5: PHPDoc propose une forme de notation de type Generics.

Syntaxe

Type[] 
Type<Type> 
Type<Type[, Type]...> 
Type<Type[|Type]...> 

valeurs dans une collection peut même être un autre tableau et même une autre collection.

Type<Type<Type>> 
Type<Type<Type[, Type]...>> 
Type<Type<Type[|Type]...>> 

Exemples

<?php 

$x = [new Name()]; 
/* @var $x Name[] */ 

$y = new Collection([new Name()]); 
/* @var $y Collection<Name> */ 

$a = new Collection(); 
$a[] = new Model_User(); 
$a->resetChanges(); 
$a[0]->name = "George"; 
$a->echoChanges(); 
/* @var $a Collection<Model_User> */ 

Remarque: Si vous attendez un IDE pour faire l'assistant de code alors il est une autre question sur si l'IDE prend en charge la notation des collections PHPDoc style générique.

+0

thx, c'est ce que je cherchais, comme pour allumer si quelqu'un a besoin http://stackoverflow.com/questions/10706835/phpdorm-correct-phpdoc-for-a-collection-of-objects. Et aussi PSR-5 est dans un statut brouillon, donc cela peut changer. – YuraV