Bir OOP tasarım (PHP) bulunan pek çok değişken geçmek için doğru yolu

4 Cevap php

Nasıl düzgün bu yapı içinde başvurulan bir sınıf veri birlikte geçerdi:

                                  -Head
Index - PageBuilder - PageSection -Body
                                  -Foot

Örneğin ben, kafasına çok sayıda veri göndermek istiyorum, ama bunu önlemek istiyorum:

new PageSection('head','how to cook',$keywords,$description,$script,$css);

Yukarıdaki yönetmek ve değiştirmek için korkunç görünüyor. Ve bu örnekte gösterilmemiştir geçirilecek gerekli olacağını daha fazla veri yoktur!

Sınıflar Baş, Gövde ve Ayak kullanıcı sağlanan verilerin bir çok ihtiyacımız var, ama ne birlikte bu veri göndermek için en iyi yoldur. Bazı ihtiyaçları varsayılan ayarları kullanan bir veritabanı üzerinde veya bazı durumlarda merkezli kurulacak ederken, bazı veriler sabit kodlanmış olması gerekiyor unutmayın.

4 Cevap

Neden parametre setini temsil eden bir nesne oluşturmak değil mi? Yani sadece tek bir nesne geçmek, ancak bireysel parametreleri içerir. Bir avantajı onlar sadece parametre nesnesi işleme konum beri yöntem çağırmaları değiştirmek / kaldırmak yönteme gönderilen veri eklemek için kolayca refactor, ama olabilir.

(PHP-farkında değilim çünkü, Java) A (yapmacık) örnek aşağıda

// build the parameters from command-line args 
// (you could build from a database or XML or whatever)
PageParameters p = PageParameters.fromArgs(args);

PageSection page = new PageSection(p);

Mutlaka Form PageSection onları kendisi depolamak olacağını - PageParameters bir biçimde bir PageSection nesne oluşturmak için gerekli olan özellikleri içerir olacaktır. PageParameters PageSection ait değil özelliğe kendisi olabilir (örneğin, komut satırı args ayrıştırma, aklı-kontrol değerleri vb)

Brian Agnew ve Nicky De Maeyer gelen önerilerin ardından, belirleyiciler ve alıcılar ve yapıcı bir dizi ya da bir nesneyi de kullanıyoruz. Seçim (Zend) Benim çerçevesi bu şekilde bu hassas sorunu işler.

Her iki yöntemi kullanarak sadece bir tanesi kullanılarak üzerinde avantaj bir çift sunuyor.

  • İlk yapılandırma kolaylığı. Eğer sadece belirleyiciler ve alıcılar kullanmak olsaydı, o zaman nesne örneği sonra kodunuzda her özelliğini ayarlamanız gerekir.
  • Alıcı ve ayarlayıcıları kullanarak, bu nesnelerin içinde yönetmek için gereken her özelliği sürücü olacaktır mantık kapsüllenmesini olsun.

Zend Framework bir dizi örneği olabilir ve eklenen veya dinamik çıkarılabilir bir yapılandırma nesnesi kullanır. Bir yapılandırma nesne kurucu geçirilen zaman, o bir diziye dönüştürür ve bu şekilde kullanılır derhal olduğunu. O ya o (sadece nesne kodu parametrelerini ayarlama gibi söylemek mantıklı eğer sadece bir dizi kullanmak (veritabanından veya bir yapılandırma dosyasından ayarları yükleme gibi söylemek) mantıklı, bu şekilde, olası bir yapılandırma nesnesini kullanmak için örnekleme).

Eğer her zaman serbestçe kod nesneyi değiştirmek böylece Ayrıca, Zend Framework alıcı ve ayarlayıcıları sağlar. Aksi takdirde mevcut bir nesneyi yok etmek ve daha sonra ayarlanan parametreler ile yeniden örneğini olurdu.

Yani muhtemelen değişkenleri içeren nesneyi tanımlayan olacaktır. Bu şekilde güvenle onun adıyla belirli özelliğine başvurabilirsiniz. Ayrıca harita veya dizi kullanabilirsiniz. Örneğin, jQuery çılgınca böyle bir amaç için params nesne kullanarak, böylece kod sahip olabilir (alay sözdizimi)

doSomething(props) {
  props.head
  props.body
  props.foot
}

Bunun yerine yapıcı aracılığıyla her şeyi geçen belirleyiciler kullanabilirsiniz.

$section = new PageSection('head');
$section->addKeyword();
$section->setDescription();

Eğer, set anahtar bir dizi olsun diziyi düzenlemek ve sıfırlamak olabilir:

$keywords = $section->getKeywords();
//edit them
$section->setKeywords($keywords);

ya da hatta daha alt sınıflarının oluşturulması, ama karmaşık ve gereksiz subclassing için dışarı izlemek olabilir ...