抽象Page
クラスを使用して、PHP でテンプレート システムを作成しています。私の Web サイトの各ページは、クラスを拡張する独自のPage
クラスです。$page = new Page();
そのページのクラス名を知らずに拡張ページのクラスをインスタンス化する方法を理解できないように、抽象クラスをインスタンス化することはできません。
実行時に抽象クラスの名前しか知らない場合、抽象クラスを拡張するクラスをインスタンス化することは可能ですか? もしそうなら、どうすればそれを行うことができますか?
Page クラスの擬似コード:
<?php
abstract class Page{
private $request = null;
private $usr;
function __construct($request){
echo 'in the abstract';
$this->request = $request;
$this->usr = $GLOBALS['USER'];
}
//Return string containing the page's title.
abstract function getTitle();
//Page specific content for the <head> section.
abstract function customHead();
//Return nothing; print out the page.
abstract function getContent();
}?>
すべてをロードするインデックス ページには、次のようなコードが含まれます。
require_once('awebpage.php');
$page = new Page($request);
/* Call getTitle, customHead, getContent, etc */
個々のページは次のようになります。
class SomeArbitraryPage extends Page{
function __construct($request){
echo 'in the page';
}
function getTitle(){
echo 'A page title!';
}
function customHead(){
?>
<!-- include styles and scripts -->
<?php
}
function getContent(){
echo '<h1>Hello world!</h1>';
}
}