PHP的引用操作符& 的使用及注意事項

pythontab發表於2014-04-16

PHP的引用操作符&,熟悉C的都知道C中有一個被稱為指標的東西,指標就是指向記憶體地址的。這個&也是具有同樣的功能的。

看如下程式碼:

$source="110";
$a=$source;
$b=&$source;
$source="120";
echo $a."\r\n",$b;

這段程式碼執行之後你會發現一個問題,$a的值並沒有根據第四行程式碼$source的值改變而變化依然是原來的賦值“110”,這個很好理解,$a賦值的時候$source的值就是110,她只是把$source的值copy一個給了自己。

顯然你也會注意到變數$b的值發生了變化,$a和變數$b幾乎是同時的賦值,為什麼出現瞭如此巨大的差異呢——一個管打人的一個管救人的,差異夠大哦!

這就是PHP的引用操作符&的問題了,變數$b因為在賦值的時候應用到了&導致,$b不是copy“110”給自己而是,直接指向了$source的老巢,以後$source就是他$b了。$source 不管怎麼變化都會導致$b的變化——很像是一個主機連線兩個顯示器的關係,既然是這樣的關係了$b的變化當然會導致$source的變化了

看:

$b=122;
echo $source;

輸出的結果:122,知道了吧這兩個變數從此就是一個“人”了,不要欺負他們哦!

其實為了程式的可讀性和隨後的程式設計的誤操作,我是不推薦使用這個&引用操作符的,你想啊。你在10000行前,使用了一個$b=&$source;到10000行之後你就不一定記得了,萬一你不小心賦錯了值,排錯的時候就夠你喝一壺了!呵呵……

其實這個操作符更多的是用在了資料庫連線上,因為我們建立資料庫連線物件的時候,往往只需要一個,太多了沒用啊。

假設我們有一個類:

class MysqlConnect{} //用來建立資料庫連線,那麼我們每次呼叫的時候可以這樣寫
 
$conn=& new MysqlConnect();

這樣的寫法可以保證資料庫的連線不會被重複的建立,耗費系統資源。但是如果你真的需要多個不同的連線,你千萬不要這樣寫哦。

當然建立物件的時候這個PHP引用操作符確實是有用的,如果你一個PHP指令碼程式上建立了上千個物件的話,系統的開銷確實是很大的。如果沒有必要建立多個的,儘量使用&吧!


相關文章