作者superGA (kid...)
看板PHP
标题Re: [请益] Class的一些问题
时间Tue Jan 23 19:25:37 2007
※ 引述《StubbornLin (Victor)》之铭言:
: function getDataSource(){
: static $IsCreated = false;
: static $DataSource ;
: if(!$IsCreated){
: $DataSource = new DataSource;
: $IsCreated = true;
: }
: return $DataSource;
: }
: 在这里,我想创造一个唯一的DataSource这个class的reference
class MyClass {
private static $instance;
public function MyClass()//建构子
{
self::$instance =& $this;
}
public static function &get_instance()
{
return self::$instance;
}
}
这样就有唯一的class reference
要注意的是'&'在php跟C++的功能不一样
php4中物件传递是call by value '&'在这里的功能是call by reference
当然如果可以的话用php5就没问题了 php5中物件传递是CBR
: 透过这个函数取得,但是这样看起来很蠢
: 我用之前在C++里面的写法
: function getDataSource(){
: static $DataSource = new DataSource;
: return $DataSource;
: }
我C++不熟 请问一下这样会是唯一的class reference吗
这不会每次呼叫getDataSource()都new一个新的object吗
: 但是却得到像这样的错误讯息
: Parse error: parse error, unexpected T_NEW in
: /home/customer/kinmen.info/www/test.php on line 38
: 使用的版本是4.3.11
: 请问是因为static的变数 在这个版本里规定 本来就不能使用new这个operator
: 还是我写的方式不对?
: 接着,还有一个问题就是,直接使用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,请问该怎样写呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.112.156
※ 编辑: superGA 来自: 140.119.112.156 (01/23 19:26)