- 論壇徽章:
- 0
|
本帖最后由 hightman 于 2010-10-30 23:43 編輯
直接看代碼吧,以下代碼預(yù)期應(yīng)該是輸出 2,3,4 的 value 但,事與原違。。。(環(huán)境 php5.3.3)
- <?php
- class bar
- {
- public $value = 0;
- function &ins() {
- if (!isset($this))
- {
- $obj = new bar;
- $obj->value = 1;
- return $obj;
- }
- return $this;
- }
- public function __toString() {
- return "value is: $this->value\n";
- }
- }
- function foo()
- {
- static $obj = null;
- if (is_null($obj)) {
- $obj = &bar::ins();
- }
- $obj->value++;
- echo $obj;
- }
- foo();
- foo();
- foo();
復(fù)制代碼 早期PHP4對像返回會變成拷貝,所以通過函數(shù)定義及調(diào)用時加&來作引用,不過PHP5開始就改變了,對像在函數(shù)返回值或各種賦值時均指向同一實例。
結(jié)果今天在弄一個舊代碼時發(fā)現(xiàn)這個用法反而導(dǎo)致了大問題,原本 static 的預(yù)期效果不見了。 |
|