php的位址引用與C語言中的指針是有差别的.C語言中的指針裡面存儲的是變量的内容在記憶體中存放的位址 。
廢話少說,先看例子,
php
$a = " ABC " ;
$b =& $a ;
echo $a ; // 這裡輸出:ABC
echo $b ; // 這裡輸出:ABC
$b = " EFG " ;
echo $a ; // 這裡$a的值變為EFG 是以輸出EFG
echo $b ; // 這裡輸出EFG
?>
上面的例子大家都明白,就不再多說了。那麼看看下面的例子呢?
php
$a = " ABC " ;
$b =& $a ;
unset ( $a );
echo $b ; // 這裡輸出:ABC
?>
原來是這個樣子的,當你 unset 一個引用,隻是斷開了變量名和變量内容之間的綁定。這并不意味着變量内容被銷毀了。
//下面再來個小插曲
php中對于位址的指向(類似指針)功能不是由使用者自己來實作的,是由Zend核心實作的,php中引用采用的是“寫時拷貝”的原理,就是除非發生寫操作,指向同一個位址的變量或者對象是不會被拷貝的。
通俗的講,如果有下面的代碼
php
$a = " ABC " ;
$b = $a ;
?>
其實此時 $a與$b都是指向同一記憶體位址 而并不是$a與$b占用不同的記憶體
2:如果在上面的代碼基礎上再加上如下代碼
$a = " EFG " ;
由于$a與$b所指向的記憶體的資料要重新寫一次了,此時Zend核心會自動判斷 自動為$b生産一個$a的資料拷貝,重新申請一塊記憶體進行存儲
本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!