首頁  >  文章  >  後端開發  >  php中的&引用

php中的&引用

WBOY
WBOY原創
2016-08-18 09:16:06944瀏覽

在一些框架上有時會在函數上看到有&$arr這種類型的變量,上網搜索了只知道這是一個引用,我想知道在開發的時候在什麼情況下我們需要使用這個,而且使用這個有什麼有缺點

回覆內容:

在一些框架上有時會在函數上看到有&$arr這種類型的變量,上網搜索了只知道這是一個引用,我想知道在開發的時候在什麼情況下我們需要使用這個,而且使用這個有什麼有缺點

需要改變原始值的時候,例如我有函數需要輸出好幾個值,

題主應該知道php只能return出一個值,當然你可以用陣列包裝

<code><?php
function test(&$a,&$b){
    $a = 1;
    $b = 1;
}

test($a,$b);
echo $a,"@",$b;</code>

可以看到輸出

<code>1@1</code>

還有一種情況是大數組的時候可以省去一次記憶體拷貝,節省記憶體開銷

<code class="php">$a = "china";
$b = &$a;</code>

這樣php只需要存一份資料就可以了. 所以在程式設計的時候大變數一般要傳引用,節省記憶體資源. 在PHP函式參數呼叫中,物件預設是傳引用的.

你想問的是

<code>function (&$arr) {}
</code>

這種用法麼?

這個玩意兒是用來修改$arr本身這個變數的。因為函數是密閉的空間,如果你在函數裡變更了$arr,但是在外面的變數並不會改變。如果你不想使用return來回傳更改後的變數你就可以使用這個。

比如說
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
這個函數,你可以看到,傳回值是bool型別的,但是他也可以傳回修改後的陣列。
這就是利用&這個引用符號來做到的。

因為數組預設傳值和物件完全不一樣。傳值會複製一份,而且陣列不像整數浮點這種東西,它內容多,複製帶來的開銷很大,所以一般讓它強制傳值。

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