我已經玩過CodeIgniter,並擴展我的PHP知識,我試圖創建自己的框架。PHP get_instance /瞭解單例模式
我遇到的問題是我想要CodeIgniter get_instance()函數的一個等價物。但通過我所有的搜索,我只是無法理解它,我也不知道我是否在正確的背景下使用它。
我相信我在尋找的是單身模式,但我只是無法解決如何實施它,所以任何人都可以幫助我?
我希望能夠從內容函數中訪問框架的$ page變量。
[我要驚呼這是一個簡化版本,我的編碼通常比這更好..]
編輯之前:
<?php
class Framework {
// Variables
public $page;
function __construct()
{
// For simplicity's sake..
$this->page->title = 'Page title';
$this->page->content->h1 = 'This is a heading';
$this->page->content->body = '<p>Lorem ipsum dolor sit amet..</p>';
$this->output();
}
function output()
{
function content($id)
{
// I want to get an instance of $this
// To read and edit variables
echo $this->page->content->$id;
}
?>
<html>
<head>
<title><?php echo $this->page->title ?></title>
</head>
<body>
<h1><?php content('h1') ?></h1>
<?php content('body') ?>
</body>
</html>
<?php
}
}
new Framework;
編輯後:
<?php
class Framework {
// Variables
public $page;
public static function get_instance()
{
static $instance;
$class = __CLASS__;
if(! $instance instanceof $class) {
$instance = new $class;
}
return $instance;
}
function __construct()
{
// For simplicity's sake..
$this->page->title = 'Page title';
$this->page->content->h1 = 'This is a heading';
$this->page->content->body = '<p>Lorem ipsum dolor sit amet..</p>';
$this->output();
}
function output()
{
function content($id)
{
$FW = Framework::get_instance();
// I want to get an instance of $this
// To read and edit variables
echo $FW->page->content->$id;
}
?>
<html>
<head>
<title><?php echo $this->page->title ?></title>
</head>
<body>
<h1><?php content('h1') ?></h1>
<?php content('body') ?>
</body>
</html>
<?php
}
}
new Framework;
感謝您的幫助,我已經編輯我最初的問題,包括在那裏,我認爲它應該去的單身,但我得到這個錯誤: '致命錯誤:無法在第32行的/home/beta2/public_html/sample.php中重新聲明內容()(以前在/home/beta2/public_html/sample.php:32中聲明) – StudioLE 2011-03-24 14:15:02
我有點以爲我誤解了類和對象應該如何工作.. – StudioLE 2011-03-24 14:17:49