2、函數的傳址調用
"; echo $b;//輸出101 複製程式碼
$a=&test();//這條語句會輸出$b的值為3$a=5;$a=test();//這語句會輸出$b的值為6 解釋: 以此方式$a=test();得到的其實不是函數的參考返回,這跟普通的函數呼叫沒有差別 至於原因: 這是PHP的規定 PHP規定透過$a=&test(); 方式得到的才是函數的參考返回 至於什麼是引用返回呢(PHP手冊上說:引用返回用在當想用函數找到引用應該被綁定在哪一個變數上面時。) 這句狗屁話 害我半天沒看懂 用上面的例子來解釋就是
$a=test()方式呼叫函數,只是將函數的值賦給$a而已, 而$a做任何改變 都不會影響到函數中的$b
而透過$a=&test()方式呼叫函數呢, 他的作用是 將return $b中的 $b變數的記憶體位址與$a變數的記憶體位址 指向了同一個地方
即產生了相當於這樣的效果($a=&b;) 所以改變$a的值 也同時改變了$b的值 所以在執行了
$a=&test();
$a=5;
以後,$b的值變為了5 echo $c->abc;//這裡輸出DEF
?> 複製程式碼以上程式碼是在PHP5的運作效果
在PHP5 物件的複製 是透過引用來實現的。上列$b=new a; $c=$b; 其實等價於$b=new a; $c=&$b;
PHP5中預設就是透過引用來呼叫對象, 但有時你可能想建立一個物件的副本,並希望原來的物件的改變不影響到副本. 為了這樣的目的,PHP定義了一個特殊的方法,稱為__clone . unset ($a);
$b =& $a; unset ($a);?> 複製程式碼
這意味著,例如,unset $var 不會 unset 全域變數。 $this 在一個物件的方法中,$this 永遠是呼叫它的物件的參考。 //下面再來個小插曲 php中對於位址的指向(類似指標)功能不是由使用者自己來實現的,是由Zend 核心實現的,php中引用採用的是「寫時拷貝」的原理,就是除非發生寫入操作,指向同一個位址的變數或物件是不會被拷貝的。 通俗的講 1:如果有下面的程式碼 $a="ABC"; $b=$a; 其實此時 $a與$b都是指向同一記憶體位址 而並不是$a與$b佔用不同的記憶體 2:如果在上面的程式碼基礎上再加上如下程式碼 $a="EFG"; 由於$a與$b所指向的記憶體的資料要重新寫一次了,此時Zend核心會自動判斷,自動為$b產生一個$a的資料拷貝,重新申請一塊記憶體進行儲存。 您可能有興趣的文章: php引用傳值的實例詳解 php引用的實例碼 php引用的實例詳解 有關PHP引用的解釋 php引用(&)符號詳解 有關php變數參考、函數傳址以及物件參考的實例解析 透過實例理解php中傳值與傳引用的差異 透過實例看php位址引用的效率問題 有關php引用位址改變變數值的問題 PHP中的引用,「&」解釋 |