在一些框架上有時會在函數上看到有&$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型別的,但是他也可以傳回修改後的陣列。
這就是利用&這個引用符號來做到的。
因為數組預設傳值和物件完全不一樣。傳值會複製一份,而且陣列不像整數浮點這種東西,它內容多,複製帶來的開銷很大,所以一般讓它強制傳值。