Re: [請益] Class的一些問題

看板PHP作者 (請勿忘記密碼)時間19年前 (2007/01/23 23:44), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #15jYr0U6 (PHP)
討論串 (同標題文章)
文章代碼(AID): #15jYr0U6 (PHP)