I prefer to read and write clean code - as outlined in "Clean Code" by Robert C. Martin.
When following his credo you should not require the developer (as user of your API) to know the (internal) structure of your array.
API kullanıcı isteyebilir: Is sadece tek boyutlu bir dizi? Nesneleri çok boyutlu bir dizinin tüm seviyelerde çevresinde yayılır? I tüm nesnelere erişmek için kaç iç içe döngüler (foreach, vb) gerekiyor? Nesnelerin türü nedir o diziye "saklanan" vardır?
Eğer belirtildiği gibi tek boyutlu bir dizi olarak (nesneleri içerir) bu diziyi kullanmak istiyorum.
Nishi tarafından belirtildiği gibi kullanabilirsiniz:
/**
* @return SomeObj[]
*/
Bunun için.
Fakat yine: farkında olmak - bu standart bir bilgilendirme kısmı gösterim değildir. Bu gösterim bazı IDE üreticileri tarafından tanıtıldı.
Tamam, tamam, bir geliştirici olarak "[]" PHP bir dizi bağlı olduğunu biliyoruz. Ama "bir şey []" normal PHP bağlamında ne anlama geliyor? "[]" Anlamına gelir: "şey" içinde yeni bir öğe oluşturun. Yeni eleman her şey olabilir. Ama ne ifade etmek istiyorum: aynı tip ve kesin tip nesneleri dizisi. Gördüğünüz gibi, IDE yapımcı, yeni bir içerik sunuyor. Eğer öğrenmek zorunda yeni bir bağlam. Yeni bir bağlam diğer PHP geliştiricileri (sizin bilgilendirme kısmı anlamak için) öğrenmek zorunda kaldı. Bad tarzı (!).
Diziniz bir boyut var çünkü belki aramak istediğiniz "nesneler dizisi" bir "liste". "Liste" diğer programlama dillerinde bir çok özel bir anlamı vardır farkında olun. Örneğin "toplama" diyoruz mutch daha iyi olurdu.
Remember: you use a programming language that enables you all options of OOP.
Use a class instead of an array and make your class traversable like an array. E.g.:
class orderCollection implements ArrayIterator
Yoksa bir çok boyutlu bir dizi / object yapısı içinde farklı düzeylerde iç nesneleri saklamak istiyorsanız:
class orderCollection implements RecursiveArrayIterator
Bu çözüm tip "orderCollection" bir nesne tarafından diziyi değiştirir, ama şimdiye kadar IDE içinde kod tamamlama imkan yok. Tamam. Sonraki adım:
Bilgilendirme kısmı ile arabirimi tarafından tanıtıldı yöntemleri uygulamak - özellikle:
/**
* [...]
* @return Order
*/
orderCollection::current()
/**
* [...]
* @return integer E.g. database identifier of the order
*/
orderCollection::key()
/**
* [...]
* @return Order
*/
orderCollection::offsetGet()
Için tip ipuçlarını kullanmayı unutmayın:
orderCollection::append(Order $order)
orderCollection::offsetSet(Order $order)
Bu çözüm bir çok tanıtan durur:
/** @var $key ... */
/** @var $value ... */
Zahymaka onun / onun cevabı ile teyit gibi tüm kod dosyaları üzerinde, (döngüler içinde örneğin). API kullanıcı kodu tamamlanması için, bu bilgilendirme kısmı tanıtmak zorunda değildir. @ Yalnızca tek bir yerde mümkün olduğunca mutch olarak (var @) fazlalık azaltır döndürmek için. "@ Var ile bilgilendirme kısmı" kod kötü okunabilir yapacak serpin.
Nihayet bitirdiniz. Başarmak zor görünüyor? Bir ceviz bir balyoz alarak benziyor? Değil gerçekten, bu arayüzleri ile ve temiz kod aşina beri. Unutmayın: yazılmış kaynak kodu bir kez / çok okudum.
IDE kod tamamlama bu yaklaşımla işe yaramazsa, daha iyi biri (örn. IntelliJ IDEA, PhpStorm, Netbeans) geçiş veya IDE üreticinin sorunu izci bir özellik isteği dosyası.
Benim eğitmen olduğu için ve bana böyle büyük bir şeyler öğretmek için (Almanya) Christian Weiss için teşekkürler. PS: XING, onu ve beni tanışın.