作者MrMarcus (请勿忘记密码)
看板PHP
标题Re: [请益] Class的一些问题
时间Tue Jan 23 23:43:59 2007
※ 引述《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
1F:→ MrMarcus:有些地方有&有些地方没有,这&的使用在这里非常重要 01/23 23:46