Можно ли как-то заставить PHP учитывать, что метод описанный в интерфейсе реализован в магическом методе?
Здравствуйте!
Я написал некий класс и решил требования к нему описать в виде интерфейса. Часть требуемых методов я реализовал напрямую, а часть уже была реализована через поведение Yii. В IDE я могу это учесть через PHPDOC @method, но сам PHP на это кладет болт и заявляет, что для полноценной работы недостающие методы таки надо реализовать. В итоге я получаю ошибку: Class contains N abstract methods and must therefore be declared abstract or implement the remaining methods
Можно ли как-то заставить PHP поверить, что метод описанный в интерфейсе реализован через магию?
В общем, как сказал Сергей Протько, методы интерфейса обязательно должны быть реализованы явно. Встречал в интернете вариант, где для каждого "магического" метода делают заглушку через return $this->__call(__FUNCTION__, func_get_args()), но это как-то не фонтан как и необходимость выдумывать новое имя для метода. Решил через Trait со всеми недостающими методами, а внутри трейта исходные методы вызываю через parent::methodName().
Сергей Протько: если я сделаю так: public function method() { return $this->method(); } - это очевидно вызовет бесконечную рекурсии, а выдумывать новое имя метода для выполнения все тех же действий - как-то не оч. хорошо. На счет магии согласен, но так уж повелось в Yii, да и удобно бывает.