我目前正在开发一个简单的 PHP 模板引擎,我必须做出决定,但我不确定如何解决这个问题。
我编写了一个名为“Page”的类,它加载当前页面的页面组件。这是它现在的样子:
<?php
class Page {
private $currentPage;
private $header;
private $content;
private $footer;
const CONTENT_DIR = 'content/';
const CONTENT_FILE_EXT = '.php';
public function __construct(Header $header, Content $content, Footer $footer) {
$this -> header = header;
$this -> content = content;
$this -> footer = footer;
}
public function getCurrentPage() {
if(!isset($this -> currentPage)) {
if(isset($_GET["p"])) {
try {
$this -> setCurrentPage(trim($_GET["p"]));
} catch(FileNotFoundException $e) {
}
}
else
$this -> setCurrentPage('start');
}
return $this -> currentPage;
}
private function setCurrentPage($pageName) {
if(file_exists(self::CONTENT_DIR.$pageName.self::CONTENT_FILE_EXT)) {
$this -> currentPage = $pageName;
}
else
throw new FileNotFoundException();
}
}
?>
现在,我有第二类“PageFactory”:
<?php
class PageFactory {
public function build() {
$header = new Header();
$content = new Content();
$footer = new Footer();
return new Page($header, $content, $footer);
}
}
?>
传递当前页面(要加载的页面)只是感觉不对。我应该更好地使用静态函数来返回当前页面吗?问题是我在其他类中也需要这个功能(例如菜单)。我必须通过参数再次传递当前页面。
感谢您的任何建议!