15

インターフェイスを使用したいのですが、実装の中には__invokeや__callなどの魔法のメソッドに依存しているものがあります。インターフェイスから(任意の実装で)魔法のように呼び出される可能性のあるメソッドのシグネチャを削除する必要があります。これはアンチパターンのEmptyInterfaceにつながります(ええ、私はそれを作りました)。

PHPでインターフェースとマジックメソッドをどのように組み合わせますか?

4

1 に答える 1

14

実装内のすべてのインターフェースメソッドをにディスパッチし__call()ます。それは多くの不器用なカットアンドペースト作業を伴いますが、それは機能します。

interface Adder {
    public function add($x, $y);
}

class Calculator implements Adder {
    public function add($x, $y) {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function __call($method, $args) {
        ...
    }
}

少なくとも、各メソッドの本体は同一にすることができます。;)

于 2011-02-11T07:54:53.147 に答える