PHP4和PHP5中的引用&
文章轉載自重慶PHP,原文地址:http://www.php-chongqing.com/index.php/article/104
PHP提供了引用操作符(&),在PHP中引用的意思是用不同的名字訪問同一個變數內容,PHP4和PHP5中的對象引用是有區別的。
$a = 8;$b = $a;echo '$a:' . $a; // 8echo '$b:' . $b;// 8 $a = 12;echo '$a:' . $a; // 12echo '$b:' . $b;// 8
首先建立變數$a,把整數8賦值給$a,然後把$a賦給$b,這時候PHP建立一個$a的副本,再把這個副本賦給$b,通俗點說就是記憶體中產生了兩個變數,變數的值都是8,這兩個變數一個指向$a,一個指向$b,所以列印結果$a和$b都是12,接著我們將12賦給$a,然後再列印$a和$b,可以看到$a的值變成12了,而$b的值還是8,這個很容易理解,因為$a和$b是兩個完全不相干的變數。
$a = 8;$b &= $a;echo '$a:' . $a; // 8echo '$b:' . $b;// 8 $a = 12;echo '$a:' . $a; // 12echo '$b:' . $b;// 12
首先建立變數$a,把整數8賦值給$a,然後把$a賦給$b,注意是使用的&引用賦值,列印$a和$b,兩個變數的均為8;接著我們把12賦給$a,再列印$a和$b,可以看到$b的值也變成12了。PHP的引用操作符(&),可以不讓程式產生一個副本,$a和$b指向同一塊記憶體地區,即$a和$b是同一個變數,所以當$a的值發生變化時,$b的值也會跟著發生變化。這就好比‘張三’,上學的時候同學們給取個綽號‘三娃’,無論是‘張三’還是‘三娃’所指的都是那一百多斤,都是指的同一個人。
在PHP4中,當你建立對象並將其賦值給其它變數時,PHP4總是會產生一個該對象的副本,將整個對象及所有內容複寫過去。PHP4的這種對象處理方式非常的糟糕,複製對象會讓程式佔用更多的記憶體,複製對象往往還會引起一些莫名其妙的錯誤。這種糟糕的對象處理方式在PHP5中得到了改善,在PHP5中對象總是以引用的方式傳遞。
$user = new User();$user->name = 'zhangsan';$bing = $user;$bing->name = 'bing.peng';echo $user->name; // For PHP4: zhangsanFor PHP5: bing.peng
在PHP4下運行上面的代碼,列印出來的是:‘zhangsan’;在PHP5下列印結果為:‘bing.peng’,可以看到PHP5預設就是使用引用賦值,注意PHP5隻是物件類型預設使用引用賦值,基本類型還是會產生副本,那麼要在PHP5中複製對象,需要使用clone關鍵字來完成,如果想要在PHP4中得到同樣的效果,我們就需要使用引用操作符,代碼如下:
$user = new User();$user->name = 'zhangsan';$bing &= $user;$bing->name = 'bing.peng';echo $user->name;