У меня есть класс ParentClass()
, некоторые детские классы ChildClass1()
, ChildClass2()
и т. Д. И интерфейс iChild()
. В ChildClass()
наследует от ParentClass()
и орудие iChild()
:Интерфейсы: требуется абстрактная константа?
class ChildClass1
extends ParentClass
implements iChild {}
class ChildClass2
extends ParentClass
implements iChild {}
В iChild()
-Интерфейсе, Я хотел бы требовать, что некоторые константы должны быть заполнены (которые в основном идентификаторы и некоторые определения функциональности). Я не нашел никакого смысла это делать, поскольку константы могут быть определены только в интерфейсе, но которые не переопределяются в реализующих классах. Единственным обходным решением, которое я нашел, является определение некоторых геттер-функций в iChild()
, которые, в свою очередь, возвращают необходимые значения, но это, похоже, не является правильным способом. Поскольку я уже простираюсь от ParentClass()
, я также не могу использовать абстрактный класс, например. проверьте определение требуемых констант во всех ChildClasses.
Любые идеи о том, как решить эту проблему?
Update: Чтобы ответить на комментарий - с более компактной и более читаемым я имею в виду следующее:
class ChildClass1 {
const MY_NAME = "Foo Bar Name 1";
}
-- vs --
class ChildClass1 {
public function GetMyName() {
return "Foo Bar Name 1";
}
}
Я нашел первый пример намного более читаемым и понятным, чем второй. К сожалению, в настоящее время у меня нет способа заставить MY_NAME установить ChildClasses.
Вот как я его реализовал, но я бы скорее назвал константу, чем метод. Он более компактный и «чувствует себя более правильным». Спасибо за ваш ответ. – Lars
Как он компактен и «чувствует себя более правильно»? В любом случае не должно быть разных реализаций, которые определяют разные константы, не привязывая себя к имени классов реализации. – cspray