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

Ema*_*olm 13 php interface magic-methods

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

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

Dav*_*ess 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) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这是否意味着神奇的 __call` 方法不再有用?可能只是一个名为“bridge”或 w/e 的方法。 (2认同)