//引用回傳
<code>function &testReturn(){ static $b = 1; $b += 2; return $b; } $a = &testReturn(); $a = 8; $c = &testReturn(); $c = 12; $d = testReturn(); //echo $d; function &cuitReturn(){ $a = 2; return $a; } $cr = &cuitReturn(); //echo $cr; $cr = 4; $cr1 = cuitReturn(); echo $cr1; </code>
第二個函數,改變賦值變數的值,$cr = 4;函數的回傳值為什麼沒變?
//引用回傳
<code>function &testReturn(){ static $b = 1; $b += 2; return $b; } $a = &testReturn(); $a = 8; $c = &testReturn(); $c = 12; $d = testReturn(); //echo $d; function &cuitReturn(){ $a = 2; return $a; } $cr = &cuitReturn(); //echo $cr; $cr = 4; $cr1 = cuitReturn(); echo $cr1; </code>
第二個函數,改變賦值變數的值,$cr = 4;函數的回傳值為什麼沒變?
你第一個函數, 程式碼其實是這樣的, 因為$b
是個靜態變數, 所以函數執行完也不會被 released.
<code class="php">... //省略代码 $c = &$b; $c = 12; //此处$b为12 $d = testReturn(); //$b+2 echo $d; //当然是14而不是7</code>
但是第二個函數中$a
是個局部變數, 函數執行完了, 這塊變數的記憶體就釋放了.
首先要明確一點, 呼叫函數是否回傳引用函數名前面要加 &, 賦值語句前面也要加& 所以,題主中$cr1 = cuitReturn();
其實不是引用這是一點.
回到題主說的,為什麼回傳值沒有改變,是因為函數cuitReturn
裡面的 $a
是一個局部變數,而且不是靜態的,所以,函數返回之後就被釋放了,$cr = &cuitReturn();
相當於是引用了一個局部變數, 這要是放在C++裡面是會出大事的...這意味著指針指向未知內存, 但是PHP 引擎應該是有處理的, 所以$rc
對於$a
的引用是無效的