Re: [請益] Class的一些問題
※ 引述《StubbornLin (Victor)》之銘言:
: function getDataSource(){
: static $IsCreated = false;
: static $DataSource ;
: if(!$IsCreated){
: $DataSource = new DataSource;
: $IsCreated = true;
: }
: return $DataSource;
: }
: 在這裡,我想創造一個唯一的DataSource這個class的reference
: 透過這個函數取得,但是這樣看起來很蠢
: 我用之前在C++裡面的寫法
: function getDataSource(){
: static $DataSource = new DataSource;
: return $DataSource;
: }
: 但是卻得到像這樣的錯誤訊息
: Parse error: parse error, unexpected T_NEW in
: /home/customer/kinmen.info/www/test.php on line 38
: 使用的版本是4.3.11
: 請問是因為static的變數 在這個版本裡規定 本來就不能使用new這個operator
: 還是我寫的方式不對?
PHP 4的話,你可以這樣寫:
class DataSource {
....
.... 略
function & singleton() {
static $instance;
if(!$instance) {
$instance = new DataSource();
}
return $instance;
}
}
當你需要使用DataSource物件的時候:
$ds =& DataSource::singleton();
$ds->query(); // 開始操作
在同一支程式裡面重複呼叫 $ds =& DataSource::singleton(); 都會傳回
同一個instance的reference。注意使用這樣的singleton pattern,在需要
用到物件的時候要使用前面寫的方式,而不是使用$ds = new DataSource();
我個人在處理資料庫操作的時候也用這樣的方式,這樣可以自由地在任何
地方使用$ds =& DataSource::singleton();來取得物件的參照,而不需要
去擔心重複建立物件的副本,造成在同一個程式裡面重複對資料庫進行多次
連線的問題。
: 接著,還有一個問題就是,直接使用Class::Function取得的Class Refrence
: 去做->然後存取東西也會出錯
: echo DataSource::getDataSource()->GetData();
: 錯誤訊息
: Parse error: parse error, unexpected T_OBJECT_OPERATOR, expecting ',' or ';'
: in /home/customer/kinmen.info/www/test.php on line 52
: 而修正問題的方式我先用一個變數去接class的refrence
: 然後再操作這個變數就解決了
: $DataSource = DataSource::getDataSource();
: echo $DataSource->GetData();
: 但是我還是希望能夠直接操作回傳來的class,請問該怎樣寫呢?
PHP4不支援這樣的寫法。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.154.199.81
→
01/23 23:46, , 1F
01/23 23:46, 1F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章