我想使用接口,但我的一些实现依赖于魔术方法,如__invoke和__call。我必须从界面中删除可能被神奇地(在任何实现中)调用的方法的签名。这导致反模式空接口(是的,我刚刚做了)。
如何在PHP中组合接口和魔术方法?
答案 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) {
...
}
}
至少每种方法的主体可以是相同的。 ;)