Недавно я внедрил систему шаблонов для моей домашней платформы для генерации веб-сайтов.В настоящее время я пытаюсь реализовать использование интерфейса во всей иерархии классов шаблонов следующим образом (это только пример):
interface IStyleSheet
{
public function StyleSheetFragment();
}
abstract class TemplateBase
{
public abstract function DoRender();
}
abstract class TemplateRoot extends TemplateBase implements IStyleSheet
{
public function DoRender()
{
?>
<div id='content1'>
<?php
$this->Content1();
?>
</div>
<div id='content2'>
<?php
$this->Content2();
?>
</div>
<?php
}
public abstract function Content1();
public abstract function Content2();
public function StyleSheetFragment()
{
?>
<style>
#content1{
text-align: center;
}
#content2{
text-align: right;
}
</style>
<?php
}
}
class PageView_Home extends TemplateRoot implements IStyleSheet
{
public function Content1()
{
?>
<div id='foo'>
<?php
// some ui stuff here
?>
</div>
<?php
}
public function Content2()
{
?>
<div id='bar'>
<?php
// some more ui stuff here
?>
</div>
<?php
}
public function StyleSheetFragment()
{
?>
<style>
#foo{
/*
styling stuff
*/
}
#bar{
/*
more styling stuff
*/
}
</style>
<?php
}
}
теперь класс представления в конце иерархиипри вызове рефлексии я хочу иметь возможность циклически перебирать список базовых классов 1 на 1 и вызывать интерфейсную функцию StyleSheetFragment () в каждом из них без автоматического преобразования в одну переопределенную версию в классе представления.
Другой вариант, который я рассматривал, состоял в том, чтобы использовать статические функции, но это не может быть реализовано с помощью интерфейса, я мог бы определить его в самом базовом классе, но, опять же, в этом случае нет ничего, что будет специально обозначать класскак самозванный (так сказать).
Это действительно должно быть приведено в исполнение по типу, поэтому я решил использовать шаблон интерфейса для него.
Любые комментарии или предложения будут наиболееоценили.