PHP中的多重继承

我正在寻找一种好的,干净的方法来解决以下事实:PHP5仍然不支持多重继承。这是类的层次结构:

消息

-的TextMessage

-------- InvitationTextMessage

- EmailMessage

-------- InvitationEmailMessage

这两种类型的Invitation

*类有很多共同点。我希望有一个共同的父类,邀请函,他们两个都可以继承。不幸的是,他们与当前祖先也有很多共同点……TextMessage和EmailMessage。对多重继承的经典渴望。

解决问题的最轻巧的方法是什么?

谢谢!

回答:

Alex,大多数时候,您需要多重继承是一个信号,表明您的对象结构有些不正确。在您概述的情况下,我看到您的班级职责范围太广。如果Message是应用程序业务模型的一部分,则不应考虑呈现输出。相反,您可以划分责任并使用MessageDispatcher来发送使用文本或html后端传递的消息。我不知道您的代码,但是让我这样模拟:

$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);

这样,您可以向Message类添加一些特殊化:

$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);

请注意,MessageDispatcher将根据type传递的Message对象中的属性来决定是以HTML还是纯文本形式发送。

// 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");

}

}

总结起来,责任分为两类。消息配置在InvitationHTMLMessage /

InvitationTextMessage类中完成,并将发送算法委托给调度程序。这称为策略模式,您可以在此处阅读更多内容。

以上是 PHP中的多重继承 的全部内容, 来源链接: utcz.com/qa/408225.html

回到顶部