Je préfère lire et écrire du code propre, comme il est précisé dans le "Code Propre" par Robert C. Martin.
Quand à la suite de son credo, vous ne devriez pas exiger que le promoteur (en tant qu'utilisateur de votre API) pour connaître le (internes) de la structure de votre tableau.
L'API utilisateur peut demander: Est-ce qu'un tableau à une seule dimension? Sont les objets de propagation de tous les niveaux d'un tableau multi dimensionnel? Combien de boucles imbriquées (foreach, etc.) ai-je besoin pour accéder à tous les objets? Quels types d'objets sont "stockés" dans ce tableau?
Comme vous l'avez indiqué que vous souhaitez utiliser ce tableau (qui contient des objets) comme un tableau unidimensionnel.
Comme indiqué par Nishi vous pouvez utiliser:
/**
* @return SomeObj[]
*/
pour cela.
Mais encore une fois: ce n'est pas une norme docblock notation. Cette notation a été introduite par certains IDE producteurs.
D'accord, d'accord, en tant que développeur, vous savez que les " []", est lié à un tableau en PHP. Mais que faire d'un "quelque chose[]" dans PHP normal contexte? "[]" signifie: créer un nouvel élément à l'intérieur de "quelque chose". Le nouvel élément pourrait être tout. Mais ce que vous voulez exprimer est: tableau d'objets avec le même type et de sa nature exacte. Comme vous pouvez le voir, l'IDE producteur introduit un nouveau contexte. Un nouveau contexte que vous avez dû apprendre. Un nouveau contexte d'autres développeurs PHP ont eu à apprendre (pour comprendre vos éléments). Mauvais style (!).
Parce que votre tableau ne ont une dimension peut-être vous voulez l'appeler "tableau d'objets" a "liste". Être conscient que la "liste" a une signification spéciale dans d'autres langages de programmation. Il serait mutch mieux de l'appeler "collection" par exemple.
Rappelez-vous: vous utilisez un langage de programmation qui vous permet toutes les options de la programmation orientée objet.
Utiliser une classe au lieu d'un tableau et faire de votre classe traversable comme un tableau. E. g.:
class orderCollection implements ArrayIterator
Ou si vous le souhaitez stocker les objets internes sur différents niveaux au sein d'un multi-dimensionnelle tableau/objet de la structure:
class orderCollection implements RecursiveArrayIterator
Cette solution remplace votre tableau par un objet de type "orderCollection", mais de ne pas activer la complétion de code dans votre IDE jusqu'à présent. Ok. Prochaine étape:
Mettre en œuvre les méthodes qui sont introduites par l'interface avec des éléments en particulier:
/**
* [...]
* @return Order
*/
orderCollection::current()
/**
* [...]
* @return integer E.g. database identifier of the order
*/
orderCollection::key()
/**
* [...]
* @return Order
*/
orderCollection::offsetGet()
N'oubliez pas d'utiliser le type de conseils de:
orderCollection::append(Order $order)
orderCollection::offsetSet(Order $order)
Cette solution s'arrête l'introduction d'un lot de:
/** @var $key ... */
/** @var $value ... */
l'ensemble de vos fichiers de code (par exemple, dans les boucles), comme Zahymaka confirmé avec sa réponse. Votre API utilisateur n'est pas obligé de la présenter éléments, d'avoir la complétion de code. Pour avoir @return sur un seul endroit réduit la redondance (@var) mutch que possible. Saupoudrer les "éléments avec @var" serait de rendre votre code pire lisible.
Finalement vous avez terminé. Semble difficile à atteindre? Regarde comme prendre une masse pour casser une noix? Pas vraiment, puisque vous êtes familier avec les interfaces et avec un code propre. Rappelez-vous: votre code source est écrit une fois / lire beaucoup.
Si la complétion de code de votre IDE ne fonctionnent pas avec cette approche, passer à un meilleur (par exemple, IntelliJ IDEA, PhpStorm, Netbeans) ou déposer une demande de fonctionnalité sur le bug tracker de votre IDE producteur.
Merci à Christian Weiss (de l'Allemagne), pour avoir été mon formateur et pour l'enseignement de moi comme un grand truc. PS: à la rencontre de moi et lui sur XING.