返回引用,在定義和呼叫的時候 & 都不可以省略。
這是個比較容易混淆的概念,如果不是出於某些特殊的原因,建議還是不要使用。
說他很容易混,是因為 reference 在 php5 中的變化,造成其在 php4/php5 中表現的行為差異比較大。
舉個例子說明:
複製** **如下:
<?php
$color = 'yellowgreen';
function &getref()
function getcopy()
$colorref = &getref();
$colorref = 'blue';
//$colorcopy = getcopy();
//$colorcopy = 'black';
var_dump($color);
var_dump($colorref);
//var_dump($colorcopy);
執行一遍上面的**,差不多就明白了,使用 &getref() 將把 $colorref 繫結到 $color 上面,也就是說 $colorref 和 $color 兩個變數是指向同乙個值了。當改變其中乙個值時,另乙個也會跟著變化。
如果 $color 是乙個陣列,也是一樣的,上面的**在 php4/5 的任意版本中,表現行為都是一樣的。
當 $color 是乙個 object 的時候,問題就出現了。
php4 中 getcopy 仍然會返回乙個複製的 object;&getrwww.cppcns.comef() 返回引用。
php5 中就有點另類了,
最新的 php5.2,行為和 php4 一樣,getcopy() 返回複製,&getref() 返回引用。
但是某些的 php5 的版本這裡稍微有些不同,比如 php5.1.6,表現為 getcopy() 和 &www.cppcns.comgetref() 都是引用。
這裡 getcopy() 和 &getref() 是兩www.cppcns.com個全域性函式,如果放到類裡面成為類的 member functions,那又會是另外一番景象……
ps:返回 references 並不會提高效能,有時候反而降低效能,所以不要想當然的使用這個特性來「優化」程式。
有問題看看手冊大部分時候都可以找到答案:
本文標題: php中返回引用型別的方法
本文位址: /wangluo/php/122016.html
返回型別 》引用
1.何謂 引用 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用,不是新定義了乙個變數,它只表示該引用名...
C 函式返回非引用型別與返回引用型別
函式的返回過程和引數傳遞過程是相對稱的兩個的過程。引數傳遞從呼叫函式向被呼叫函式傳遞,返回值從被呼叫函式向呼叫函式返回。有與傳遞方式的區別 拷貝副本與傳遞本身 函式形參可以分為引用形參和非引用形參 類似的,函式返回值也可以分為非引用型別返回值和引用型別返回值,二者的差異和引用形參和非引用形參型別。當...
C 返回引用型別 指標的引用
c 返回引用型別a a 就生成了乙個固定位址的指標,並把指標帶給你 但a a 會生成乙個臨時物件變數,並把這個臨時變數給你 這樣就多了一步操作 當返回乙個變數時,會產生拷貝。當返回乙個引用時,不會發生拷貝,你可以將引用看作是乙個變數的別名,就是其他的名字,引用和被引用的變數其實是乙個東西,只是有了兩...