Verileri PHP'de nesne yönelimli şekilde nasıl iletirim?


11

Bir MVC çerçevesi (örn. CodeIgniter) ile çalışırken bile, düzenli olarak nesneler yerine iç içe dizileri geçmeye başvuruyorum.

Bu, nesne yönelimli iyi anlayışımı izlemiyor. Örneğin, kodu Java'ya taşıyacak olsaydım, dizileri (veya Vektörleri veya her şeyi) bu şekilde geçirmeyi hayal etmem.

Bunun veri işlemek için uygun bir yol olup olmadığını merak ediyordum. PHP'de dizilerin bu şekilde aktarılmasının veya nesnelerin neden kullanılmamasının bir nedeni var mı? Verileri aktarmanın en iyi yolu nedir?

Yanıtlar:


8

Java'nın OO'sunu PHP ile karıştırmayın. Java tek bir paradigma dilidir, yani sadece OO yapar. PHP ise çoklu paradigma dilidir, işlevsel programlama veya OO veya her ikisini birden yapabilirsiniz.

Şimdi OO'nun "kötü" uygulaması diye bir şey yok. Java'nın OO'su, diğer tüm dillerin izlemesi veya izlemesi gereken kesin bir uygulama değildir. Bazı kesin kavramlar vardır ve her iki dil de bunları kendi yollarıyla tam olarak uygular (başlangıçtan beri Java, sürüm 5'ten beri PHP).

Sorunuzu cevaplamak için: CI'nin yaptığı ve onunla ne yaptığınız doğru PHP dünyasında. PHP dizileri en esnek ve kullanışlı yapılarından biridir ve verileriniz sadece bilgi olduğunda nesneler üzerinde diziler kullanmak iyi bir şeydir (onlarla mantık taşımayın). Tamamen OO kodu "sadece OO kodu" ile aynı şey değildir.

PHP ile başlıyorsanız, Java'yı iyi OO uygulamaları için referans olarak kullanın, ancak "Java farklı şekilde yapar" olayı nedeniyle PHP anlayışınızı sınırlamayın. Her ikisini de gerçekten sıkıştırabilirsiniz, kavramları alamazsanız paradigma sizi kurtaramaz.

Her durumda Java'yı beğeninize göre daha fazla bulursanız (kişisel bir tercih olarak) web geliştirme için Ruby'ye bakın, biraz daha yakından ilişkilidir.


Java OO'yu neden PHP OO ile karıştırmamalıyız? PHP'nin yerel bir dizi / karma veri tipine sahip olması dışında hemen hemen aynıdırlar.
Martin Wickman

Uygulamalar oldukça benzer. Her iki dilde de nasıl kullanıldıklarından bahsediyordum.
yannis

OOP ile ilgili bir sorunum var. Bir nesnenin diğer nesnelere bağlı olacağı bir uygulama (PHP tabanı) için OOP tasarımı oluşturmak istiyorum. PHP bunu nasıl ele alabilirim? plz bana yardım et ...
Imran Khan

Örnek Senaryo: Otel nesnesinin bir Oda nesnesinin Date nesnelerine sahip olması gereken Oda nesnelerine ... ve bir Date nesnesinin kişi türleri için fiyatları vardır. Şimdi PHP'de bu tür bir senaryoyu OOP tabanı ile nasıl ele alacağız (çünkü her seviyede işlenmesi gereken büyük veri var).
Imran Khan

@ Ceviz Cevabını bekliyorum .... plz yardım et.
İmran Han

2

Nesneler, nesneler OO paradigması olmadığı için kullanılır, sadece kişisel tercihlerdir :)

Nesneler IDE'de kullanışlı kod tamamlama sağlar, arayüzler (tip ipucu) ve kalıtım kullanılabilir.

Herhangi bir fayda gördüğünüz için dizi yerine nesneleri kullanmak istiyorsanız - bunları kullanın, ancak bunları sadece nesneler olduğu için kullanmak istiyorsanız - bu yeniden düzenleme için zamanınızı boşa harcamayın :)


" diziler daha fazla bellek ve CPU alacak gibi kullanım nesneleri. " Bu (her zaman) doğru değildir. Bir dizi ile aynı miktarda veri içeren bir nesne neredeyse aynı miktarda bellek kaplar.
yannis

@Yannis Rizos, evet, nesneler bile daha az bellek kullanabilir, düzenlenmiş.
OZ_

Sadece daha az bellek kullanabildikleri için değil, bellek kullanımları da önemsizdir, çünkü sistemin diğer bellek performansı yönlerine ve nesneleri kullanmanın yararlarına kıyasla önemsizdir. Bellek kullanımını bu kadar çok önemseseydik, asla nesne kullanmazdık. Önem verdiğimiz şey, nesnelerin bize sistemler hakkında akıl yürütmek ve sistemleri inşa etmek için daha iyi araçlar sağlamasıdır.
Rein Henrichs

@ Henrichs'i hatırla, biliyorum, teşekkürler. Bu yüzden 'hafıza' ile ilgili tüm kelimeler cevabımdan kaldırıldı. Aptalca optimizasyon yapmaya çalışmıyorum, ama eminim objects just because they are objectsyeniden düzenleme için bir neden değil :) Cevabımı oku, sadece yorumları değil.
OZ_

yeterince adil, düzenlemelerden önce yorum yaptım.
Rein Henrichs

1

Bir OO sisteminde gerçekten veri aktarmazsınız - etrafta nesne aktarırsınız. Fark, nesnelerin verilerin yanı sıra davranış içermesidir. Bu yüzden ona veri odaklı değil nesne yönelimli diyorlar.

Verilerinizle davranışa ihtiyaç duymadığınız sürece, düz eski php dizileri değer nesneleri kadar iyi (veya bakış açınıza bağlı olarak kötü).


0

Bu sadece bir ayarlama sorunu olduğunu düşünüyorum - programlama "nesneler" birçok uygulama vardır - Python ve Javascript çarpıcı derecede farklı özelliklere sahip. PHP OO tartışmasız bir hack'tir - PHP dizileri geleneksel anlamda "nesneler" değildir - ancak bariz bir amaca hizmet ederler. Verilerin özel DAVRANIŞ olmasını istemiyorsanız, neden bir nesne kullanıyorsunuz?

DÜZENLE:

re: değişmez değer nesneleri

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/


Verilere güvenilir bir yapı kazandırmak. Evet, dizinin belirli bir biçimini / iç içe geçmesini sağlayan bir işlev oluşturabilirim ama kimin biraz değiştirip başka bir işlev yazmadığını söyleyebilirim.
Matthew

1
emin - o zaman değişken erişimi korumak için bir nesneye ihtiyacınız olacaktır - örneğin Python tuples'in PHP eşdeğeri yoktur. Ama işte gidiyorsunuz - problemi tanımladınız, sadece dil için mevcut olan yapıları kullanmalısınız ... ya da sadece onun “tuhaflıkları” ile yaşamayı öğrenmelisiniz. İlk gönderime, sorunun ilginç bir tartışmasını içeren bir bağlantı ekledim.
sunwukung
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.