<?php/*** 在php 中引用的意思是用不同的名字訪問同乙個變數內容
* 只有有名字的變數才可以引用賦值,否則會報錯
* 引用賦值 不是在記憶體上同體,只是把各自的值關聯起來
* unset不會導致所有引用變數消失 */
$a = 10;
$b = &$a; //
引用賦值
echo
$b,''; //
10function
test()
$b = &test();
echo
$b,''; //
20function &test2()
$b =test2();
echo
$b,'';
unset($a
);
echo$b;
//函式的傳址呼叫
function test3(&$a
)
$b=1;
echo
$b;//
輸出1 test3($b); //
這裡$b傳遞給函式的其實是$b的變數內容所處的記憶體位址,通過在函式裡改變$a的值 就可以改變$b的值了
echo "
";
echo
$b;//
輸出101
// 函式的引用返回
function &test4()
$a=test4();//
這條語句會輸出 $b的值 為1
$a=5;
$a=test4();//
這條語句會輸出 $b的值 為2
$a=&test4();//
這條語句會輸出 $b的值 為3
$a=5;
$a=test4();//
這條語句會輸出 $b的值 為6
/*通過這種方式$a=test();得到的其實不是函式的引用返回,這跟普通的函式呼叫沒有區別
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
這裡是為了讓大家理解函式的引用返回才使用靜態變數的,其實函式的引用返回多用在物件中
*///
物件的呼叫
class
a$b=new
a;$c=$b
;echo
$b->abc;//
這裡輸出abc
echo
$c->abc;//
這裡輸出abc
$b->abc="def";
echo
$c->abc;//
這裡輸出def
/*在php中,物件的複製是通過引用來實現的。
上列中$b=new a; $c=$b; 其實等效於$b=new a; $c=&$b;
php中預設就是通過引用來呼叫物件, 但有時你可能想建立乙個物件的副本,並希望原來的物件的改變不影響到副本。
為了這樣的目的,php定義了乙個特殊的方法,稱為__clone.
引用的作用
如果程式比較大,引用同乙個物件的變數比較多,並且希望用完該物件後手工清除它時使用 "&" 方式,然後用$var=null的方式清除。
另外,php中對於大陣列的傳遞,建議用 "&" 方式,可以節省記憶體空間使用。
取消引用
當你 unset 乙個引用,只是斷開了變數名和變數內容之間的繫結。這並不意味著變數內容被銷毀了。
*/
案例:
<?php$data = ['a', 'b', 'c'];
foreach($data
as$key => $val
)
var_dump($data
); /**
* $key 0 $val = a $val = &$data[0]
** $key 1 $val = $data[0] = b $val = &data[1]
** $key 2 $val = $data[1] = c $val = &data[2]
** 輸出 b c c
*/
php5 值賦值與引用賦值
b 值賦值 2個變數有各自的記憶體,互不影響 b str1 wang str2 str1 str1 zhang echo str2 wang b 引用賦值 用 2個變數共用乙個記憶體,乙個變化,另乙個也變化。b i zhao j wang j i echo j zhao j hello,j echo...
PHP變數引用賦值與變數賦值變數的區別
變數預設總是傳值賦值。那也就是說,當將乙個表示式的值賦予乙個變數時,整個原始表示式的值被賦值到目標變數。這意味著,例如,當乙個變數的值賦予另外乙個變數時,改變其中乙個變數的值,將不會影響到另外乙個變數。有關這種型別的賦值操作,請參閱表示式一章。foo abc b foo b my name is b...
深入理解php的引用賦值
關於php引用的一般問題大家看資料就行了,這次我們來聊點有趣的東西。今天乙個朋友在群裡面問起來乙個關於變數引用賦值的問題,問題本身很簡單,我突然想做乙個實驗,來看看array直接賦值和引用賦值效能上的差別,寫完 發現另外乙個問題.請看 a array fill 0,1000000,10 functi...