PHP引用賦值

2022-03-03 10:46:13 字數 2377 閱讀 5753

<?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...