php 多個(gè)變量指向同一個(gè)引用($b = &$a)用法分析
本文實(shí)例講述了php 多個(gè)變量指向同一個(gè)引用($b = &$a)用法。分享給大家供大家參考,具體如下:
引用是什么?
引用就是多個(gè)變量指向同一個(gè)內(nèi)存區(qū)域地址。如我們經(jīng)常用的實(shí)例一個(gè)類,就是內(nèi)存中開(kāi)辟了一個(gè)區(qū)域存儲(chǔ)實(shí)例的類,實(shí)例賦值給變量就是讓這個(gè)變量指向這個(gè)內(nèi)存區(qū)域。
多個(gè)變量指向同一個(gè)引用有什么好處?
節(jié)約了內(nèi)存空間,多個(gè)變量指向同一個(gè)內(nèi)存地址,在調(diào)用的時(shí)候多個(gè)變量都是指向的同一個(gè)內(nèi)存地址。
多個(gè)變量指向同一個(gè)引用的缺點(diǎn)
要注意使用安全,即是由于多個(gè)變量都是指向的同一個(gè)內(nèi)存地址,其中一個(gè)變量更改了某個(gè)屬性,其它的變量調(diào)用的時(shí)候都是用的已經(jīng)更改的實(shí)例。
在php 中我們?yōu)橐粋€(gè)變量賦值的時(shí)候會(huì)在內(nèi)存中開(kāi)辟一個(gè)區(qū)域存儲(chǔ)該值。那么我們將這個(gè)變量賦值給另一個(gè)變量的時(shí)候會(huì)在內(nèi)存中重新開(kāi)辟一個(gè)區(qū)域去存儲(chǔ)改值嗎? 我做了如下實(shí)驗(yàn)
<?php $d = "aaa"; $c = $d; echo $c . "<br />"; $d = "bbb"; echo $c . "<br />"; /** * 執(zhí)行結(jié)果是 * aaa * aaa */ ?>
看到這里 不知道你理解了沒(méi)有,創(chuàng)建的變量$d 并為之賦初始值aaa 再將$d 賦值給$c,之后輸出$c 然后更改$d的值,在輸出$c。這個(gè)實(shí)驗(yàn)告訴我們,$d再給$c賦值的時(shí)候是在內(nèi)存中重新開(kāi)辟了一個(gè)區(qū)域的。
那么,我們?cè)趺床拍茏?d和$c 都指向一個(gè)引用呢? 查了下資料 如下方法 讓兩個(gè)變量指向同一個(gè)內(nèi)存地址
<?php $a = "123"; $b = &$a; echo $b."<br />"; $a = "456"; echo $b; /** * 運(yùn)行結(jié)果如下 * 123 * 456 */ ?>
我更改了一下變量的名字。方便測(cè)試發(fā)現(xiàn)區(qū)別。在這里我們可以看到 $b=&$a 其中&符號(hào)的作用就是讓$b 指向的是$a的內(nèi)存區(qū)域,而不是重新開(kāi)辟一個(gè)區(qū)域。所以當(dāng)更改$a的值的時(shí)候$b也會(huì)隨著變化。
前面我們實(shí)驗(yàn)的對(duì)象是基本字符串,現(xiàn)在我們來(lái)看下類是否遵從這個(gè)規(guī)則
<?php class Demo { public $demo = "aaaa"; } $demo1 = new Demo(); $demo2 = $demo1; echo $demo2->demo . "<br />"; $demo1->demo = "bbbb"; echo $demo2->demo . "<br />"; /** * 運(yùn)行結(jié)果 * aaaa * bbbb */ ?>
我這里并沒(méi)有&符號(hào)指定$demo2必須指向$demo1 的內(nèi)存區(qū)域,所以關(guān)于類,當(dāng)一個(gè)實(shí)例變量賦值給另一個(gè)變量的時(shí)候默認(rèn)就是兩個(gè)變量指向同一個(gè)引用;
php 的引用我覺(jué)得沒(méi)有 java的好用,也許是這門語(yǔ)言本身還在發(fā)展,很多處理還沒(méi)有那么方便完善。 java初去基本數(shù)據(jù)類型(int、long、byte、short、char、boolean、float、double等),兩個(gè)變量賦值都是指向同一個(gè)內(nèi)存地址,而且不用你特意去指定。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
解析PHP函數(shù)array_flip()在重復(fù)數(shù)組元素刪除中的作用
本篇文章是對(duì)PHP函數(shù)array_flip()在重復(fù)數(shù)組元素刪除中的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php中使用接口實(shí)現(xiàn)工廠設(shè)計(jì)模式的代碼
php實(shí)現(xiàn)工廠設(shè)計(jì)模式,使用接口實(shí)現(xiàn),表面上接口沒(méi)有什么用,因?yàn)閜hp是類型自動(dòng)轉(zhuǎn)換的。實(shí)現(xiàn)上使用接口可以約束類的定義,從而實(shí)現(xiàn)一致的訪問(wèn)2012-06-06PHP+redis實(shí)現(xiàn)添加處理投票的方法
這篇文章主要介紹了PHP+redis實(shí)現(xiàn)添加處理投票的方法,結(jié)合實(shí)例較為詳細(xì)的分析了PHP+redis數(shù)據(jù)庫(kù)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11判斷是否為指定長(zhǎng)度內(nèi)字符串的php函數(shù)
判斷是否為指定長(zhǎng)度內(nèi)字符串2010-02-02wamp服務(wù)器訪問(wèn)php非常緩慢的解決過(guò)程
這篇文章主要介紹了wamp服務(wù)器訪問(wèn)php非常緩慢的解決過(guò)程,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問(wèn)題排查
這篇文章主要介紹了php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問(wèn)題排查,需要的朋友可以參考下2016-09-09PHP 獲取遠(yuǎn)程文件內(nèi)容的函數(shù)代碼
PHP 獲取遠(yuǎn)程文件內(nèi)容的代碼,后面有一些注釋可以參考下,其實(shí)大家可以參考腳本之家發(fā)布的一些采集程序代碼。2010-03-03