Re: [請益]return $this; 與 return (&$this); 的옠…

看板PHP作者 (抓不住...)時間16年前 (2009/09/10 22:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ 引述《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
文章代碼(AID): #1AgGR_Ty (PHP)
文章代碼(AID): #1AgGR_Ty (PHP)