PHP 引用是個壞習慣

2022-03-06 06:33:10 字數 968 閱讀 3550

這篇文章,寫的比較早,有一些錯誤的說法,我表示非常歉意。一些**,沒有經過嚴格的測試,以後寫部落格一定要非常謹慎。因為可能會對一些人產生誤導。

在寫php 程式的時候,很多人在傳遞引數的時候,喜歡用乙個引用。特別是在乙個陣列非常的大的時候,更是喜歡加。

function

binsearch(

&$arr

,$key

,$value)

elseif(

$value

>

$item

) else }

return

false

; }

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

我用下面的**進行測試:

$data = array();

for ($i = 0; $i < 1000000; $i++)

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 的原則。實際上這個引用是多餘的。

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

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

主要技術count 的時候,出了問題,要進行複製。

PHP 引用是個壞習慣

在寫php 程式的時候,很多人在傳遞引數的時候,喜歡用乙個引用。特別是在乙個陣列非常的大的時候,更是喜歡加。function binsearch arr key value elseif value item else return false 在這裡,mid 採用了先減後加的方法計算,目的是為了防...

PHP 引用是個壞習慣

在寫php 程式的時候,很多人在傳遞引數的時候,喜歡用乙個引用。特別是在乙個陣列非常的大的時候,更是喜歡加。複製 如下 function binsearch arr,key,value else if value item else return false 在這裡,mid 採用了先減後加的方法計算...

PHP 引用是個壞習慣

這篇文章,寫的比較早,有一些錯誤的說法,我表示非常歉意。一些 沒有經過嚴格的測試,以後寫部落格一定要非常謹慎。因為可能會對一些人產生誤導。在寫php 程式的時候,很多人在傳遞引數的時候,喜歡用乙個引用。特別是在乙個陣列非常的大的時候,更是喜歡加。function binsearch arr key ...