【发布时间】:2013-09-12 18:39:33
【问题描述】:
我正在尝试想出一种方法,让任何(或至少一组)班级都有选择的能力。
这是我想要的通用接口
interface OptionableInterface
{
public function getOption($key);
public function setOption($key, $value);
public function getOptions();
public function setOptions($options, $merge);
public function removeOption($key);
}
我曾考虑过使用上述接口实现一个具体类,然后根据需要对其进行扩展,但由于 PHP 没有多重继承,这可能是个问题。
另一种方法是使用装饰器模式。但我不确定这是否是装饰器模式的正确用法。
有什么想法吗?我现在坚持使用 PHP 5.2(也许以后可以更改为 5.3,在这种情况下我可以使用特征)。
【问题讨论】:
-
这被称为
mixin- 你在类中包含你的扩展而不实际继承它:stackoverflow.com/questions/6876925/… -
traits 在 PHP 5.4 中首次发布。因此,如果您只升级到 PHP 5.3,您将无法使用它们
-
为什么不直接明确选项,这样我就不必每次想使用可选对象来查找它可以采用的选项时都查找您的文档?将使代码更具可读性。废弃那个界面。
-
是的,对不起,我记错了 5.4 是:P 我想我没有任何特点,因为我的公司不会很快升级到 5.4
-
所有这些类都很难弄清楚。没有人可以通过查看您的类的 API 知道他们可以采取哪些选项。因此,不要让一个通用但不说话的 OptionableInterface 给你的类提供有意义的设置器,比如
setFoo(42)而不是setOption('foo', 42);。
标签: php design-patterns