首頁  >  文章  >  後端開發  >  關於php引用的問題

關於php引用的問題

WBOY
WBOY原創
2016-08-31 08:54:511050瀏覽

//引用回傳

<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 的引用是無效的

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn