php關於變數的引用機制

2021-07-24 08:00:38 字數 1317 閱讀 9775

昨天晚上躺在床上輾轉反側,睡也睡不踏實,思來想去的也不知道在想什麼,工作的這段時間裡發現自己都變蒼老了,心情隨筆就到這,好了,我們步入正題。

1.變數的引用,php中的「&」:

$a  = "hello world";//定義乙個變數,下面賦值給$b

$b = $a; //這一步實際上原理是會將變數$a複製拷貝乙份,也就是記憶體中重新申請乙個位址儲存變數$b

注:在php中,使用 "

=" 直接賦值,其實就是拷貝乙份右邊的變數給$b,會生成乙份記憶體空間,結果可能是同樣的內容在記憶體中兩份。

2、使用符號「&」進行引用

$a  = "hello world";

$b = &$a;

所以使用引用的時候,

把$b的值改變,$a也會跟著改變。

$a = "hello world";

$b = &$a;

$b = "test new value"; //把b的值改掉,a的值也會跟著改變

echo $a; //輸出test new value,因為改變了b的值也會改變a的值。

經常在定義函式的時候看到像這樣的情況:

function test (&$param)

$k = 8;

test($k);

echo $k; //結果$k的值被函式裡面改變了,輸出9。

注:$param前面帶有引用,所以傳入進來的引數並不會在記憶體中拷貝乙份,而是直接對原來的記憶體空間進行引用。所以:如果裡對使用符號&傳入進來的變數值進行修改了,那麼也會

改變原來的記憶體空間中的值。

3、銷毀變數的時候。並不會改變原來的值。

$a = 'd';

$b = &$a;

$b = 8;

var_dump($b,$a); //因為是引用了,所以把b的值改掉,a的值也跟著改為8了。

unset($b); //呼叫unset刪除b變數,a變數不會刪除

var_dump($b,$a); //輸出null和8

注:呼叫unset刪除$b變數的時候,php引擎從變數符號表中發現:我要刪除的變數$b原來是引用了變數$a,這不好刪除啊,因為一刪除導致$a變數也沒了,所以就先把$a變數拷貝乙份後在刪除$b變數。

關於PHP的變數引用

變數的引用,其實就是不同名字的變數指向同乙個記憶體位址的內容。通俗了說,黃河也叫濟水。指的是同一條河流,現代人都叫黃河,就相當於 unset 濟水 可是黃河是存在的,只是刪掉了 濟水 這個名字而已。先秦時期的荀子在辯論 白馬飛馬 等哲學論題時就提出了名實之間劃定界限,一物可有多名,而多名並非多物。言...

php引用變數

php引用變數 cow copy on write php變數在賦值的時候不會新開闢乙個記憶體空間,只有在變數有改變操作的時候才會開闢新的記憶體空間 定義變數a a range 0,10000 var dump memory get usage 將變數a賦值給變數b b a var dump mem...

php 引用變數

定義 不同變數名指向同一變數內容 位址 符號 定義變數 a,記憶體開闢乙個空間儲存 a a指向該空間 a a 定義變數 b,因為cow copy on write 特性,a,b都引向 a b a 如果改變 a的值,記憶體又開闢空間儲存,a指向該空間。此時 b還是指向原來的空間 a hello 可以使...