程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP開發經驗:引用是個壞習慣

PHP開發經驗:引用是個壞習慣

編輯:關於PHP編程

在寫PHP 程序的時候,很多人在傳遞參數的時候,喜歡用一個引用。特別是在一個數組非常的大的時候,更是喜歡加。

function binsearch(&$arr, $key, $value)
{
$low = 0;
$high = count($arr);

while ($low <= $high) {
$mid = floor($low + ($high - $low) / 2);
$item = $arr[$mid][$key];
if ($item == $value) {
return $mid;
} else if ($value > $item) {
$low = $mid + 1;
} else {
$high = $mid - 1;
}
}
return false;
}

在這裡,$mid 采用了先減後加的方法計算,目的是為了防止整數的溢出。不是故意寫復雜了。

我用下面的代碼進行測試:

$data = array();
for ($i = 0; $i < 1000000; $i++)
{
$data[] = array("sq" => $i * 2);
}
var_dump(binsearch($data, "sq", 10000));

發現,binsearch 的時候,總是要花個 0.2s左右。理論上來說,100萬的數據,最多也就是循環20次。怎麼會這樣慢呢。

後來監控了一下內存,data 數組 占用了 230M 的內存。而 binsearch 的時候,占用了60K 的內存。但是,理論上來說,binsearch

不應該占用如此多的內存。因為,我覺得,我已經用引用了,根本就沒有對data 的結構進行修改。

我也是百思不得其解,後來,我把引用參數去掉,居然 binsearch 只要 0.0002s ,看來是引用耗費了大量的cpu 資源。

PHP 內部遵循一個copy on write 的原則。實際上這個引用是多余的。

但是為什麼,加了引用速度會變慢呢?今天重點就談談這個問題。明白道理後,大家一定知道怎麼用引用了。

如果在binsearch 調用前,直接 $a = &$data,這個引用的速度會非常的快。看來肯定不是引用本身產生的問題。

這個問題,實際上涉及了zend 引擎如何管理PHP變量。

  • 共2頁:
  • 上一頁
  • 1
  • 2
  • 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved