15

我想使用接口,但我的一些实现依赖于魔术方法,例如 __invoke 和 __call。我必须从接口中删除可能被魔法(在任何实现中)调用的方法的签名。这导致了反模式 Empty Interface(是的,我只是编造的)。

如何在 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 回答