【发布时间】:2011-08-13 02:36:36
【问题描述】:
由于特性在 PHP 5.3 AFAIK 中不可用,我需要模拟它们提供的一些功能。接口不起作用,因为我需要具体的功能。
问题:
我有两个客户端类需要共享一些功能,但从不同的基类扩展。
ClassA extends Foo {}
ClassB extends Bar {}
我需要能够在两个类中实现一个名为 getComponent() 的函数,并且它需要功能相同。
更改基类不是一种选择。我正在考虑做这样的事情:
Class ComponentHandler {
function getInstance() {
//return singleton
}
function getComponent() {
//required functionality
}
}
Class A extends Foo {
var $handler;
function __construct() {
$this->handler = ComponentHandler::getInstance();
}
}
我会在 ClassA 和 ClassB 中实现这个构造函数。在我的客户中,我会这样打电话:
$class = new ClassA();
$class->handler->getComponent();
$class = new ClassB();
$class->handler->getComponent();
【问题讨论】:
-
我认为您提出的方法实际上是可行的方法(顺便说一下,它叫做Composition)。
-
请分别添加所需的空格来阐明 ClassA 和 Class A 语法。同意@Brian - 你所拥有的不仅足够,而且比使用 Galen 建议的实现引入更多 DI 更好(虽然经典且仍然可用)[下文]。
标签: php design-patterns traits