[英]In PHP, how do we return a large array?
如果這是代碼,請說:
function bar() {
$result = array();
for ($i = 0; $i < 1000; $i++) {
$result[] = $i * 10;
}
return $result;
}
$ha = bar();
print_r($ha);
返回像這樣的大型數組是否效率低,因為它是“按值返回”? (如果它不是1000而是1000000)。 所以為了改進它,我們是否會將第一行更改為:
function &bar() {
也就是說,只需在函數名前添加一個&
- 如果返回一個大數組,這是正確的首選方法嗎?
關於PHP如何處理變量存儲存在很多誤解。 由於PHP是“寫入時復制”,因此無需創建“引用”(實際上是符號表別名)以節省空間或時間。 事實上,這樣做會傷害你。 如果要將其用作某些內容的別名, 則只應在PHP中創建引用。 我運行了兩個片段,看起來第二個實際上使用了更多的內存(雖然不是很多)。
順便說一下,1000個整數的數組很小 。
如果在函數和外部memory_get_peak_usage()
,您將看到返回數組不會增加內存。
寫的PHP副本。 在這種情況下,即使您執行寫操作也無需復制,因為原始變量超出了范圍。 所以不,沒有理由這樣做。
事實上,在PHP中,除非您需要它們提供的功能 ,否則通常沒有理由使用引用:更改原始變量。
官方手冊頁說:如果要使用函數來查找引用應綁定到哪個變量,則按引用返回很有用。 不要使用按引用返回來提高性能。 引擎將自動對其進行自動優化。 只有在有正當技術理由的情況下才返回引用
http://it2.php.net/manual/en/language.references.return.php
所以,在你的情況下,不要使用它。
那這個呢?
function bar($result) {
$result = array();
for ($i = 0; $i < 1000; $i++) {
$result[] = $i * 10;
}
}
bar(&$ha);
print_r($ha);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.