Ben bir CouchDB / Ajax app PHP Dizileri veya Nesneler için gitmek mi?

3 Cevap php

Kendimi dizi arasında dönüştürme ve CouchDB ve Ajax kullanan PHP uygulamalarında her zaman nesne bulmak. Tabii ki ben de JSON nesneleri dönüştürme yaşıyorum ve geri (bazen CouchDB ama çoğunlukla Ajax için), ama bu çok değil benim iş akışı rahatsız ediyor.

Şu anda ben kullanmak CouchDB modülleri tarafından döndürülen ve diğer taraftan ben dizideki gibi diziler dönmek için eski alışkanlığının var php nesneler var ("hata" => "bulunamadı", "data" => $ dataObj) Benim fonksiyonlarından. Bu gerçek php nesneler ve iç içe diziler karışık görülmesi yol açar ve ben (nesne) veya (dizi) Gerekiyorsa attı. Kötü şey ben sık sık tip hataları girmek ne türü (dizi veya nesne), yani ne bir işlev verir, ancak kalp tarafından daha fazla veya daha az olduğunu bilirler.

Planım her bir işlevden dönmeden önce nesnelere diziler döküm şimdi. Tabii ki bu üstlenmeden bir çok anlamına gelir.

Bu gitmek için doğru yolu nedir? Ne dönüşüm yükü hakkında? Diğer fikir veya ipucu?

Edit: Kenaniah cevabı ben başka bir yol gitmek gerektiğini göstermektedir, bu ben diziler için her şey savururdum anlamına gelecektir. Ve tüm Ajax / JSON şeyler için ve aynı zamanda CouchDB için ben kullanmak istiyorum

$myarray = json_decode($json_data,$assoc = true); //EDIT: changed to true, whcih is what I really meant

Daha tüm CouchDB ve Ajax fonksiyonlarını değiştirmek için çalışır ama sonunda ben iyi kod var.

3 Cevap

Nesneleri kullanmak için iyi bir neden olmadıkça Genel anlamda, always dizileri kullanmalısınız. Eğer diziler (/ özel korumalı değişkenleri, yöntem, nesne sihirli, tanımlanmış bir yapı, vb gibi) vermeyin veri için işlevsellik çeşit gerekiyorsa ve PHP diziler üzerinde nesneleri kullanmak için sadece iyi bir nedendir. Veri ile kesinlikle uğraşıyoruz Eğer kolayca array functions PHP'nin geniş bir dizi (hayır cinas) kullanarak verilerinizi işleyebilirsiniz çünkü, dizi formatı daha iyidir.

UPDATE:

Tüm yapıyorsun iki nokta arasında geçen veri ise, diziler çok daha uygun bu amaç için vardır. Alıcı taraf garantili biçimi (think arayüzler, vb) gerekirse kimse veri için sadece bir kap gibi bir dizi üzerinde bir nesneyi kullanmak olacağını tek nedeni (bildiğim kadarıyla söyleyebilirim gibi).

Ne söyleyebilirim itibaren, tamamen dönüştürmek zorunda kalmamak için CouchDB diziler iade edilmelidir.

Bu Temelde veri CouchDB saklanan tüm anahtar-değer çiftleri içeri çalışmak istediğiniz paradigmanın bağlıdır. Belki kolayca nesneleri / kuruluşlara eşlenebilir ve özellikleri ve yöntemleri olan nesneleri açısından bunun daha rahat düşünme vardır. Ya da, belki değil ve belki sınıfları sağlamak soyutlama olmaksızın ham veri ile çalışan daha rahat. Ben bu kararını bilgi vermelidir önemli fark olduğunu düşünüyorum.

PHP nesneler vs diziler ile ilgili havai bir sürü değildir. Içten onlar PHP motoru tarafından benzer şekilde muamele edilir. Bu bir endişe varsa kriter kendiniz isteyebilirsiniz, ama büyük trafik iterek ya da çok kısıtlı sunucu var sürece size fark bir sürü bulabilirsiniz olmayacağını düşünüyorum. Açıkçası web uygulaması daha hızlı optimize x86 assembler yazdıysa olurdu, ama PHP gibi bir yüksek seviyeli dil sağladığı kolaylık zevk edebilmek için istiyorum çünkü bunu yapmayın. Hatta gerekli ise, şimdi en iyi tasarım yürütmek ve daha sonra optimize.

ElephantOnCouch onlar gibi PHP nesnelerini kaydetmek izin verdiğini, PHP ile yazılmış, CouchDB istemci kütüphanesidir. Sizin nesneler örnekleri olmalıdır

  • a Doc alt sınıf
  • özelliği kullanan bir sınıf TDoc
  • IDoc arabirimini uygulayan bir sınıf

Nesneye kaydetmek için sadece çağırır:

$couch->saveDoc($myObject);

Şimdi, varsayalım $myObject çağrı MyClass (Doc bir alt sınıfı), bir örneği olan

$myObject = $couch->getDoc(Couch::STD_DOC_PATH, 'fffc7b44-3ebb-45c5-ee6b-95332433a039');

ElephantOnCouch sizin için büyü yapar çünkü otomatik olarak MyClass bir örneğini elde.

EOCSvr yerine PHP sizin MapReduce fonksiyonları yazalım CouchDB için bir Sorgu Server.