Всем привет. У меня в интерфейсе объявлено два метода, один реализован в трейте, второй в теле класса в __set() Т.е. у меня идет заполнение объекта в сеттере, я не могу в нём сделать всю реализацию и положить в трейт, специфический метод реализован в трейте. Мне не нравится, что часть реализации интерфейса ушла в трейт, а часть в класс. Абстрактный класс тоже не подходит, т.к. просится множественное наследование. Собственно, вопрос можно свести к тому, что нормально ли когда часть интерфейса реализуется в классе, а часть в трейте? Нутром чую, что нет и вопрос в том - как это можно грамотно развести? __set() is must have
Код покажи --- Добавлено --- Если рассуждать о сферических конях в вакууме: Хочешь выполнить контракт интерфейса — реализуй его без магии. Это обстоятельство непреодолимой силы. Вот теперь объясни за магию: интерфейс объявляет сигнатуры методов. А __set() реализует магию свойств, а не методов. Как ты ухитрился их столкнуть лбами?
Показывать в принципе нечего, в некоторых объектах, нужно обязательно реализовать метод __set(), а внутри метода, специфическую задачу свойств этого объекта. Код (Text): class Some implements SpecificInterface { use specificPropertiesTrait; public function __set($name, $value) { $this->specificProperties($name, $value); } } interface SpecificInterface { public function __set($name, $value); public function specificProperties($name, $value); } trait specificPropertiesTrait { public function specificProperties($name, $value) { // } }
магический методв интерфейсе это бессмыслица. раз ты захотел сохранить коня сферическим, больше подсказать нечего.