Как использовать интерфейсы и магические методы в PHP - PullRequest
13 голосов
/ 11 февраля 2011

Я хочу использовать интерфейсы, но некоторые из моих реализаций используют магические методы, такие как __invoke и __call. Я должен удалить сигнатуры методов, которые могут быть вызваны волшебным образом (в любой реализации) из интерфейса. Что приводит к анти паттерну Пустой Интерфейс (Да, я только что это придумал).

Как вы комбинируете интерфейсы и магические методы в PHP?

1 Ответ

12 голосов
/ 11 февраля 2011

Все методы интерфейса в ваших реализациях отправляются на __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) {
        ...
    }
}

По крайней мере, тело каждого метода может быть идентичным. ;)

...