請問像一個變數賦值
$foo=25;
如果執行了這一句話,是不是在記憶體中同時開闢兩個儲存空間啊 一個是儲存值25,另一個$foo裡面存的是值25的地址。
下面我這樣的理解是對的嗎?
不然,如果是開闢一個空間那unset的時候值25應該被釋放了啊:
$foo=25;
$boo=&$foo;
unset($boo);
echo $foo; //輸出25
回複討論(解決方案)
哥們,PHP5.4之後的引用部分改變了
$foo=25;$boo=$foo;unset($boo);echo $foo; //輸出25func(&$var); function func(&$var){ //對$var的一系列運算處理 }但到了php5.4以後的版本,對數組和對象的引用傳遞發生了變化,是這樣的:func($var); //注意這裡,調用函數的時候已經沒有了&,但定義的時候還有function func(&$var){//對$var的一系列運算處理}
這就好比你在案頭建立了一個捷徑,你把捷徑刪了,但是東西還在原來的位置。
等待大鳥。。。
如果你在使用unset();對其引用的變數的參考關聯性還在,那麼這塊記憶體暫時還不會被釋放,只有當所有變數對這塊記憶體地區的引用都斷掉後,這塊被釋放的記憶體地區才會被釋放
如果你在使用unset();對其引用的變數的參考關聯性還在,那麼這塊記憶體暫時還不會被釋放,只有當所有變數對這塊記憶體地區的引用都斷掉後,這塊被釋放的記憶體地區才會被釋放
謝謝回複,您好我只是想知道 當PHP解析器遇到$foo=25 在記憶體中的變化情況,可以指點下嗎,謝謝啦
如果是對象
那麼 $foo 儲存的是對象的地址
$boo = $foo 只是copy了一個地址給他
但是 資料 25 只是一個 數值 所以 不會有 25這個對象 地址直接就是 數值
$boo存放的是$foo的地址
本帖最後由 xuzuning 於 2013-11-22 14:03:00 編輯
php 的變數管理可以簡化為維護這樣一張表