角色: 姓名:王笨笨 愛稱:狗蛋兒
生澀的概念:引用就是別名,多個名字指向同乙個變數內容,沒有重複冗餘的記憶體開銷。
$a = 'runbaby';
$b = &$a;
var_dump($a,$b);
/* * string(7) "runbaby"
* string(7) "runbaby"
*/
bug:因為我們錯誤使用,導致錯誤。我們的工作是什麼:寫bug,找bug,改bug
無限迴圈···
背景:
php一般是web服務,在請求結束後會釋放所有的資源,所以phper一般不用關心記憶體的釋放。但是必須要重視,鳥哥說過:請手動釋放你的資源(please release resources manually)
鳥哥語錄:如果你買了一本php的書, 它告訴你: 「不用在php主動釋放資源, 因為php會幫你釋放」的話, 我建議你, 燒了它.
雖然,在請求結束之後資源就自動釋放了,我們不用太擔心記憶體洩漏。但是在請求中,如果沒有即時釋放引用,那麼引用將一直存在。
復現:
<?php
$array = array(
array(
'id'=>'a',
), array(
'id'=>'b',
), array(
'id'=>'c',
), array(
'id'=>'d',
));foreach ($array as &$value)
}$new_array = array();
foreach ($array as $key =>$value)
var_dump($new_array);die;
預期資料:
列印資訊:
實際資料和預期的有些差別啊 ,為什麼最後乙個重複了,不符合牛頓力學啊
前面實際已經埋下了伏筆,問題出現在:引用沒有釋放。
第乙個遍歷:使用變數 $value
第二個遍歷:使用變數 $value (同乙個變數)
詳解:(心路歷程)
偽**:
$array = array(
array(
'id'=>'a',
), array(
'id'=>'b',
), array(
'id'=>'c',
), array(
'id'=>'d',
),);
foreach ($array as &$value)
}$new_array = array();
foreach ($array as $key =>$value)
仔細觀察列印資料,發現$array[3],一直在變化,a -> b -> c -> c
變、變、變···看我七十二變
分拆步驟:
//流程:
//第一遍 $value = $new_array[0] ,但引用未釋放,$value 實際還是 $array[3] , 此時 $array[3] = $new_array[0]
結果:a 、b、c、a
//第二遍 $value = $new_array[1] ,但引用未釋放,$value 實際還是 $array[3] , 此時 $array[3] = $new_array[1]
結果:a 、b、c、b
//第三遍 $value = $new_array[2] ,但引用未釋放,$value 實際還是 $array[3] , 此時 $array[3] = $new_array[2]
結果:a 、b、c、c
//第四遍 $value = $new_array[3] ,但引用未釋放,$value 實際還是 $array[3] , 此時 $array[3] = $new_array[3]
結果:a 、b、c、c
一首小曲總結:
想得卻不可得 你奈人生何
該捨的捨不得 只顧著跟往事瞎扯
等你發現程式是錯了 它早已偷光你的選擇
該來的我不推 該還的還 該給的我給
bug 你別催 調完就ok
及時unset,解除引用操作,避免問題出現,讓我們遠離bug,
讓bug都隨風,都隨風,我心隨你動~~~
unset($value); //捨得
我為人人,人人為我,美美與共,天下大同。 如何正確使用記憶體
如何正確使用記憶體 對於初學者來說,記憶體是個神秘的空間。程式的絕大部分錯誤,也是在於記憶體的使用不當造成的,而且這些錯誤有些都是隱藏很深的。所以,如何掌握記憶體的使用,通曉系統對記憶體的管理手段,將是軟體成功的乙個非常關鍵的因素。首先我們要了解記憶體的分配方式。一般來說,記憶體的分配方式有三種 1...
如何正確使用列舉
列舉型別,對程式設計師來說再熟悉不過了,但是,你確定你在正確得使用它嗎?在用列舉之前,讓我們來區分一下狀態和選項這兩個概念。那麼,我們怎麼使用列舉來定義狀態和選項呢?不好的寫法 你可能經常見到的寫法 define status fail 0 define status success 1 用int變...
如何正確使用AOP
aop也發展了不久了,雖然在工作上也一直在用,不過畢竟沒有深入了解過,停留在概念上的理解,和使用的階段上。這篇主要講講,aop如何正確的使用它。首先需要知道,目前畢竟流行的aop框架,上篇文章也介紹了aop實現的原理,對spring這個大家庭來說,它的aop遠遠沒有這麼簡單。目前使用畢竟多的 幾種方...