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