Произвольное количество наследства?Я не могу сказать, что это путь, по которому я бы хотел пойти, но если вы должны это сделать, вы можете написать некоторый тип метода настройки в базовом классе, который принимает вызывающий (дочерний) класс в качестве параметра.Затем этот метод будет определять тип класса, обходить дерево наследования (помещая каждый родительский класс в стек), а затем просто последовательно запускать каждый метод configure.Я думаю, что основной принцип можно назвать рефлексией, но я не уверен.(Отредактируйте: теперь еще менее уверен. Обязательно прочитайте об этом, прежде чем поверить мне на слово.)
Метод в базовом классе, возможно, должен быть статическим, хотя ...
Я считаю, чточто-то вроде этого было бы возможно, но я не очень разбираюсь в PHP.Я немного поищу и посмотрю, позволяет ли это синтаксис и код. Надеюсь, однако, что вы можете использовать эту идею.
Это ужасная форма псевдокода моей идеи.
<?php
class A {
static function configure(class) {
//get qualified class name from argument
//get inheritance tree for qualified class name, push each tier into array
//loop: pop array, call configure method for each class in hierarchy
//this might possibly work?
}
}
class B extends A {
function configure() {
print("I am B::configure() and provide additional functionality.<br/>\n");
}
}
class C extends B {
function configure() {
print("I am C::configure() and provide additional functionality.<br/>\n");
}
}
$c = new C;
A::configure($c);
?>
Опять же, я посмотрю и смогу ли что-нибудь в PHP поддержать эту теорию. А пока я могу жить с несколькими отрицательными голосами.
Редактировать: На самом деле, это может не произойтидолжны быть статичными, если имена методов не перекрываются во время наследования. Это может быть немного более элегантно, поскольку объект может найти свое собственное имя класса и иерархию, вызвав метод master configure.