PHP Java benzeri Koleksiyonlar

6 Cevap java

(Ben PHP PHP4 gün oldu teslim son kez) PHP5 öğrenme yaşıyorum ve ben PHP5 OO olduğunu görmek için sevindim daha fazla Java-hem PHP4 olandan ama beni oldukça unconfortabl hissettiren bir sorun çünkü benim Java hala var background: DİZİLER.

I'm reading "Proffesional PHP6" (Wrox) and It shows its own Collection implementation. I've found other clases like the one in http://aheimlich.dreamhosters.com/generic-collections/Collection.phps based on SPL. I've also found that there's some kind of Collection in SPL (ArrayObject)

Gerçekten PHP Koleksiyonlar kullanarak insanları görmüyorum çünkü Ancak, ben şaşırdım, onlar diziler tercih gibi görünüyor.

Yani, sadece insanların Java temel diziler yerine ArrayList kullanmak gibi PHP Koleksiyonlar kullanarak iyi bir fikir değil mi? Sonuçta, php diziler java diziler gibi değil gerçekten.

6 Cevap

Bu güçlü yazılmış bir dildir beri Java koleksiyonlar anlamda bir sürü yapmak. Bunu söylemek "Arabalar" ve "Motosiklet" başka bir koleksiyona sahip mantıklı.

Ancak, PHP nedeniyle dinamik yazdığınız doğası nedeniyle, Tahsilat formalite feda oldukça yaygındır. Diziler çeşitli nesne türleri (arabalar, motosikletler, vs), genel olarak kaplar kullanılmak için yeterlidir. Ayrıca, ilave yarar dizileri (uygun hata kontrolü olmadığı zaman, bazen büyük bir dezavantaj olabilir) çok kolay bir şekilde mutasyona uğramış olabilir olmasından kaynaklanır.

Ben bir Java arka plan geliyor, ve ben PHP bir koleksiyonlar tasarım deseni kullanarak avantajları yolunda (vb hiçbir multi-threading, bellek tahsisinin optimizasyonu, hayır Yineleyicilerde) kadar satın olmadığını tespit ettik.

Eğer bu avantajları herhangi arıyorsanız, onun muhtemelen daha iyi her özelliği (Yineleyicilerde, vb) uygulanması, dizi etrafında a la carte bir sarıcı sınıf oluşturmak için.

PHP diziler Onlar çok daha güçlü Java'nın dizilerine göre konum ve List ve Harita <> dahil ... ilişkisel vardır.

"Iyi fikir" ile ne demek istiyorsunuz? Onlar başka genelde hayal kırıklığı ile sonuçlanır kullanılan şekilde bir dil kullanarak, farklı araçlar demektir.

Ben, onlar PHP çok yanlısı koleksiyon nesneleri, tür güvenliği eklemek sıralama ve manipülasyon işlevselliği, arama kullanımı kolay impliment ve dizileri kullanarak ziyade doğru OO yaklaşımı temsil etmek için kullanılabilir ve am çalışmasına faydalı ama procedual fonksiyonlarının çokluğu her kaynak kalıpları üzerinde farklı bunları.

Biz tip güvenliği, tutarlı kodlama standartları ve kod yeniden yüksek düzeyde teşvik tüm özenle miras çeşitli amaçlar için kullanan çeşitli koleksiyonları var.

Ama ultimatley, hepsi dizi dahili bulunuyor vardır!

Ben aşağı gerçekten seçimi konusunda varsayalım, ama benim nesne odaklı bir dünyada böyle tür ve temel sınıflar arama algoritmaları gibi kod kolayca tekrarlanabilir kesimleri tutmak gibi ve ben nesne notasyonu daha kendine documenting bulabilirsiniz.

Ben de, PHP hiçbir Koleksiyon tipi sınıfları bulmak biraz dehşete oldu. Diziler benim deneyim gerçek dezavantajları bir çift var.

İlk olarak, bunları işlemek için kullanılabilir işlevlerin sayısı biraz sınırlıdır. Örneğin, ben keyfi eklemek ve / belirli bir dizin konumunda bir koleksiyon öğeleri kaldırmak gerekiyor. PHP diziler için yerleşik dil fonksiyonları ile bunu yaparken acı en iyi olduğunu.

İkincisi, ilk noktanın dalı, basit bir itme / pop ve yineleyici şeyler dışında herhangi bir karmaşıklık düzeyinde dizileri manipüle temiz, okunabilir kod yazma bir tür olarak en iyi zordur. Ben sık sık dizin bir dizi kullanmak ve oluşturmak veri-yoğun uygulamalar başka dizi izlemek zorunda olduğunu bulmak.

(Benim kişisel bir seçimdir NOLOH olan) bir çerçevede çalışmayı tercih. Orada, böyle, Ekle, Kaldırır, RemoveRange ve Toggle ekleyin gibi işlevlere sahip ArrayList adlı bir gerçek Koleksiyonu sınıf var. Ben hayal diğer PHP çerçeveler de bu sorunu gidermek.

Php toplama güzel bir uygulama Varien Lib'in tarafından sağlanan, bu kütüphane OSL lisans ile Magento kod parçasıdır. (Magento lisans ve kod yeniden hakkında daha fazla bilgi here.

Kitaplığı için herhangi bir kaynak kodunu bulamıyorum bu yüzden en iyi yolu, magento indirmek ve sonra / lib / Varien / bakmaktır

Koleksiyonları yığını gibi Yii tam java uygulaması vardır

http://www.yiiframework.com/doc/api/1.1/CList