在php中使用引用賦值只需要在原始對象前加個&就可以了,$a = &$b;其實php中的引用就是兩個不同名稱的變量指向同一個值。
引用是什么
在 PHP 中引用意味著用不同的名字訪問同一個變量內(nèi)容。這并不像 C 的指針,替代的是,引用是符號表別名。注意在 PHP 中,變量名和變量內(nèi)容是不一樣的,因此同樣的內(nèi)容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——變量名是目錄條目,而變量內(nèi)容則是文件本身。引用可以被看作是 Unix 文件系統(tǒng)中的 hardlink。
一:變量的引用,代碼如下:
二:函數(shù)中引用傳值,代碼如下:
三:對象的引用傳值,對象的引用,代碼如下:
取消引用:當你 unset 一個引用,只是斷開了變量名和變量內(nèi)容之間的綁定,這并不意味著變量內(nèi)容被銷毀了,例如如下代碼:
不會 unset $b,只是 $a,例,引用傳遞,test1.php,代碼如下:
test2.php,代碼如下:
引用返回
引用返回用在當想用函數(shù)找到引用應(yīng)該被綁定在哪一個變量上面時,不要用返回引用來增加性能,引擎足夠聰明來自己進行優(yōu)化,僅在有合理的技術(shù)原因時才返回引用!要返回引用,使用此語法,代碼如下:
下面解釋下:
通過這種方式$a=test();得到的其實不是函數(shù)的引用返回,這跟普通的函數(shù)調(diào)用沒有區(qū)別,至于原因:這是PHP的規(guī)定
PHP規(guī)定通過$a=&test(); 方式得到的才是函數(shù)的引用返回
至于什么是引用返回呢(PHP手冊上說:引用返回用在當想用函數(shù)找到引用應(yīng)該被綁定在哪一個變量上面時)這句狗屁話,害我半天沒看懂
用上面的例子來解釋就是:$a=test()方式調(diào)用函數(shù),只是將函數(shù)的值賦給$a而已,而$a做任何改變 都不會影響到函數(shù)中的$b,而通過$a=&test()方式調(diào)用函數(shù)呢, 他的作用是將return $b中的$b變量的內(nèi)存地址與$a變量的內(nèi)存地址,指向了同一個地方,即產(chǎn)生了相當于這樣的效果($a=&$b;) 所以改變$a的值,也同時改變了$b的值,所以在執(zhí)行了
$a=&test(); $a=5; 以后,$b的值變?yōu)榱?
這里是為了讓大家理解函數(shù)的引用返回才使用靜態(tài)變量的,其實函數(shù)的引用返回多用在對象中.
在舉一個有意思的例子是在oschina上看到的,代碼如下:
因為沒有unset($n),所以它始終指向數(shù)組的最后一個元素,第二個foreach里第一次循環(huán)把$n,也就是$a[2]改成了ABE,第二次循環(huán)改成了BEN,第三次就也是BEN了。