亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在PHP(> = 5.0)中,通過引用傳遞速度更快嗎?

在PHP(> = 5.0)中,通過引用傳遞速度更快嗎?

子衿沉夜 2019-10-29 14:35:57
在PHP中,可以通過在函數聲明中的參數前面加上“&”號來通過引用傳遞函數參數,如下所示:function foo(&$bar){    // ...}現在,我知道這不是為了提高性能而設計的,而是允許函數更改通常不在其范圍內的變量。取而代之的是,PHP似乎使用寫時復制來避免在對象被更改之前復制對象(也許還有數組)。因此,對于不更改其參數的函數,效果應與您通過引用傳遞它們的效果相同。但是,我想知道寫時復制邏輯是否可能在傳遞引用時短路,并且這是否會對性能產生影響。ETA:可以肯定的是,我認為它并不快,而且我很清楚這不是引用的目的。所以我想我自己的猜測很好,我是在尋找一個真正知道內幕下肯定會發生什么的人的答案。在PHP開發的五年中,我總是發現很難通過閱讀源代碼獲得有關PHP內部構件的質量信息。
查看完整描述

3 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

Zend Engine使用寫時復制,當您自己使用引用時,會產生一些額外的開銷。但是,僅在撰寫本文時才能找到此提及,并且手冊中的注釋包含其他鏈接。


(編輯)關于對象和引用的手冊頁包含有關對象變量與引用如何不同的更多信息。


查看完整回答
反對 回復 2019-10-29
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

我對此進行了一些測試,因為我不確定給出的答案。


我的結果表明,按引用傳遞大型數組或字符串的速度明顯更快。


這是我的結果: 基準測試


Y軸(行程)是一個函數在一秒鐘內可以調用多少次* 10


每個功能/變量重復測試8次


這是我使用的變量:


$large_array = array_fill(PHP_INT_MAX / 2, 1000, 'a');

$small_array = array('this', 'is', 'a', 'small', 'array');

$large_object = (object)$large_array;

$large_string = str_repeat('a', 100000);

$small_string = 'this is a small string';

$value = PHP_INT_MAX / 2;

這些是功能:


function pass_by_ref(&$var) {

}


function pass_by_val($var) {

}


查看完整回答
反對 回復 2019-10-29
  • 3 回答
  • 0 關注
  • 715 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號