PHP4跟PHP5中的引用&

來源:互聯網
上載者:User
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; 
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.