私は、クリーンなコードを読み書きすることを好みます。彼の信任に従うとき、開発者に(APIのユーザーとして)配列の(内部)構造を知っている必要はありません。
APIユーザーは尋ねるかもしれません:それは1次元のみの配列ですか?オブジェクトは多次元配列のすべてのレベルに広がっていますか?すべてのオブジェクトにアクセスするには、いくつのネストされたループ(foreachなど)が必要ですか?その配列にはどのタイプのオブジェクトが「格納」されていますか?
概説したように、その配列(オブジェクトを含む)を1次元配列として使用します。
Nishiによって概説されているように、あなたは使うことができます:
/**
* @return SomeObj[]
*/
そのため。
ただし、再度注意してください。これは標準のdocblock表記ではありません。この表記法は、一部のIDEプロデューサーによって導入されました。
わかりました、わかりました。開発者は、「[]」がPHPの配列に関連付けられていることを知っています。しかし、「何か[]」は通常のPHPコンテキストではどういう意味ですか?「[]」は、「何か」内に新しい要素を作成することを意味します。新しい要素がすべてになる可能性があります。しかし、表現したいのは、同じタイプのオブジェクトの配列であり、正確なタイプです。ご覧のとおり、IDEプロデューサーは新しいコンテキストを導入しています。あなたが学ばなければならなかった新しい文脈。他のPHP開発者が(docblockを理解するために)学ばなければならなかった新しいコンテキスト。悪いスタイル(!)
配列には1つの次元があるため、その「オブジェクトの配列」を「リスト」と呼ぶこともできます。「リスト」は他のプログラミング言語では非常に特別な意味を持つことに注意してください。たとえば「コレクション」と呼んだほうがいいでしょう。
注意:OOPのすべてのオプションを可能にするプログラミング言語を使用します。配列の代わりにクラスを使用し、クラスを配列のようにトラバース可能にします。例えば:
class orderCollection implements ArrayIterator
または、内部オブジェクトを多次元配列/オブジェクト構造内のさまざまなレベルに格納する場合:
class orderCollection implements RecursiveArrayIterator
このソリューションでは、配列を「orderCollection」タイプのオブジェクトに置き換えますが、これまでのところ、IDE内でコード補完を有効にしないでください。はい。次のステップ:
docblockを持つインターフェースによって導入されるメソッドを実装します-特に:
/**
* [...]
* @return Order
*/
orderCollection::current()
/**
* [...]
* @return integer E.g. database identifier of the order
*/
orderCollection::key()
/**
* [...]
* @return Order
*/
orderCollection::offsetGet()
タイプヒントを使用することを忘れないでください:
orderCollection::append(Order $order)
orderCollection::offsetSet(Order $order)
このソリューションは多くの導入を停止します:
/** @var $key ... */
/** @var $value ... */
Zahymakaが彼女/彼の答えで確認したように、コードファイル全体(ループ内など)。APIユーザーは、コード補完を行うために、そのdocblockを導入する必要はありません。@returnを1か所だけに置くと、冗長性(@var)ができるだけ減ります。"docBlocks with @var"を振りかけると、コードが最も読みやすくなります。
ついに完成です。達成するのが難しいように見えますか?ハンマーでナットを割るように見えますか?あなたはそのインターフェースとクリーンなコードに精通しているので、実際にはそうではありません。覚えておいてください:あなたのソースコードは一度書かれた/たくさん読んだ。
IDEのコード補完がこのアプローチで機能しない場合は、より優れた方法(IntelliJ IDEA、PhpStorm、Netbeansなど)に切り替えるか、IDEプロデューサーの課題追跡に機能リクエストを提出してください。
私のトレーナーであり、私にそのような素晴らしいことを教えてくれたクリスチャン・ワイス(ドイツから)に感謝します。PS:XINGで私と彼に会ってください。