0

私は、任意の (または少なくともグループの) クラスにオプションを持たせることができるようにする方法を考え出そうとしています。

これは私が持ちたい汎用インターフェースです

interface OptionableInterface
{
    public function getOption($key);
    public function setOption($key, $value);
    public function getOptions();
    public function setOptions($options, $merge);
    public function removeOption($key);
}

上記のインターフェースで具体的なクラスを実装し、必要に応じて拡張することを考えましたが、PHP には多重継承がないため、これは問題になる可能性があります。

もう 1 つの方法は、デコレータ パターンを使用することです。しかし、これがデコレータ パターンの正しい使い方かどうかはわかりません。

何か案は?私は今のところ PHP 5.2 の使用に固執しています (後で 5.3 に変更できるかもしれませんが、その場合は特性を使用できます)。

4

2 に答える 2

1

継承やインターフェースの代わりにコンポジションを使用できます。多分このようなもの:

class SomethingThatHasOptions {
  public $options;
  public function __construct () {
    $this->options = new OptionProvider ();
  }
}

class OptionProvider {
    public function getOption($key) { ... }
    public function setOption($key, $value) { ... }
    public function getOptions() { ... }
    public function setOptions($options, $merge) { ... }
    public function removeOption($key) { ... }
}

そして、次のように使用できます。

$optionable = new SomethingThatHasOptions;
$optionable->options->setOption('foo', 42);
于 2013-09-12T18:44:05.197 に答える