如何在PHP中使用接口和魔术方法

时间:2011-02-11 06:48:45

标签: php interface magic-methods

我想使用接口,但我的一些实现依赖于魔术方法,如__invoke和__call。我必须从界面中删除可能被神奇地(在任何实现中)调用的方法的签名。这导致反模式空接口(是的,我刚刚做了)。

如何在PHP中组合接口和魔术方法?

1 个答案:

答案 0 :(得分:12)

将实现中的所有接口方法分派到__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) {
        ...
    }
}

至少每种方法的主体可以是相同的。 ;)