Re: [請益]return $this; 與 return (&$this); 的옠…
※ 引述《gabriev (水母水母水中游)》之銘言:
: 首先要說明一下 return (&$this); 的意思
: 應該是要下面這樣才對
: $obj = &$this;
: return $obj; // 直接寫 return (&$this) 會有語法上的錯誤
: 我是想問一個觀念上的問題,算是call by refernce的觀念
其實你想問的是應該是 return by reference吧
: 先舉下面的code為例子:
: class OBJECT_A {
: private $var = 'obja';
: functio foo() { return $this }
: }
: $obja = new OBJECT_A;
: class OBJECT_B {
: private $var = 'objb';
: functio foo() { $obj = &$this; return $obj; }
: }
: $objb = new OBJECT_B;
: $a = $obja->foo();
因為$obja->foo()回傳的是物件,又php的物件總是assign by reference
所以 $a與$obja是指向同一個...
你可以試著改 $obja->var = 'cloud'; //要先將private改為public
你再將 $a->var印出來看看是否相同.......
: $b = $objb->foo();
這其實也是一樣的,
你應該要改成 :
class OBJECT_B
{
private $var = 'objb';
function &foo() // 注意&, 這才是 return by reference
{ return $this; }
}
但是這跟第一個範例是一樣的效果,因為是回傳物件...
所以要用在member才看得出效果?!
值得一提,用return by reference,有可能會造成 private 被外界更改到...
請小心服用....
: 現在這個範例中有四個變數 $obja, $objb, $a, $b
: 照 php 中 Variable References 的觀念來看這四個變數的關係, 依我的理解是
: $a is not equal $obja, $a 是個新的物件OBJECT_A
: $b equal $objb, $b 和 $objb 是完全相同的物件
: 不知道我在觀念上是否有誤?
: 另外我想知道 return $this; 的作法,是否等於 clone 一個新物件呢?
: 那這樣 return $this; 是否就會再增加一個與原物件相同大小的記憶體空間嗎?
: 我的目的是想清楚地瞭解php是如何處理記憶體的調用
: 理想上我希望能不增加記憶體的使用量,就能讓物件在整個程式內被共同使用
: 所以 return $this; 是否會再新增記憶體空間, 對我相當地重要
: 如果我的理解沒有錯誤
: 那我會使用 $obj = &$this; return $obj; 這樣的方式達到我的目的
: 還請各位板上的朋友多多討論
: 謝謝指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.37.133
PHP 近期熱門文章
PTT數位生活區 即時熱門文章