0
我最近一直在爲我自己開發的網站生成器平臺實現模板系統。什麼我目前正試圖實現在整個模板類層次結構,像這樣使用的接口(這只是一個例子):試圖在對象實例的抽象層次結構中調用接口函數
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並逐個調用接口函數StyleSheetFragment(),而不必自動解析視圖類中的一個被覆蓋的版本。
我正在考慮的另一個選擇是使用靜態函數,但不能用接口強制執行,我可以在非常基類中定義它,但是在那種情況下,沒有什麼東西會專門將類指定爲自稱(可以這麼說)。
它確實需要按類型強制執行,因此我選擇使用它的接口模式。
任何意見或建議將不勝感激。