SORU
18 EYLÜL 2008, PERŞEMBE


PHP birden çok Devralma

İyi, temiz bir şekilde PHP5 hala birden çok devralma desteklemiyor aslında dolaşmak için sabırsızlanıyorum. İşte sınıf hiyerarşisi:

Mesaj< / ^ br . -- TextMessage< / ^ br . -------- İnvitationTextMessage< / ^ br . -- EmailMessage< / ^ br . -------- İnvitationEmailMessage

Davetiye* sınıfları iki tür ortak noktamız var; ikisi de ortak bir üst sınıf, Davetiye, mirasçı olmasını çok isterdim. Ne yazık ki, onlar da mevcut ataları... TextMessage ve EmailMessage ile çok ortak noktamız var. Birden çok devralma burada klasik arzusu.

Sorunu çözmek için hafif en yaklaşımı nedir?

Teşekkürler!

CEVAP
18 EYLÜL 2008, PERŞEMBE


Alex, birden çok devralma gerekir çoğu kez, bir nesne yapısı biraz yanlış bir sinyal. Durumda sınıf sorumluluk sadece çok geniş olduğunu görüyorum seni sıraladı. Eğer İleti uygulama iş modelinin bir parçası ise, çıkış oluşturma hakkında dikkat çekmek gerekir. Bunun yerine, sorumluluk bölünmüş ve Mesaj metin veya html uç kullanarak geçti gönderdiği MessageDispatcher kullanabilirsiniz. Kodunu bilmiyorum, ama o beni canlandırır. bu şekilde izin:

$m = new Message();
$m->type = 'text/html';
$m->from = 'John Doe <jdoe@yahoo.com>';
$m->to = 'Random Hacker <rh@gmail.com>';
$m->subject = 'Invitation email';
$m->importBody('invitation.html');

$d = new MessageDispatcher();
$d->dispatch($m);

İleti sınıfı için bazı uzmanlık ekleyebilirsiniz bu şekilde

$htmlIM = new InvitationHTMLMessage(); // html type, subject and body configuration in constructor
$textIM = new InvitationTextMessage(); // text type, subject and body configuration in constructor

$d = new MessageDispatcher();
$d->dispatch($htmlIM);
$d->dispatch($textIM);

Bu MessageDispatcher olarak HTML veya düz metin nesnesi, iletilen Mesaj type özellik bağlı olarak gönderilip gönderilmeyeceğini karar olacağını unutmayın.

// in MessageDispatcher class
public function dispatch(Message $m) {
    if ($m->type == 'text/plain') {
        $this->sendAsText($m);
    } elseif ($m->type == 'text/html') {
        $this->sendAsHTML($m);
    } else {
        throw new Exception("MIME type {$m->type} not supported");
    }
}

Özetle, sorumluluk iki sınıf arasında paylaştırılır. Mesaj yapılandırma İnvitationHTMLMessage/İnvitationTextMessage sınıf yapılır ve gönderme algoritması memuru temsilci. Bu Strateji Desen, daha çok kitap okuyabilirsiniz 7* *denir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • laptopmag

    laptopmag

    25 Ocak 2008
  • RocketJump

    RocketJump

    22 ŞUBAT 2006