PHP中的引用意味著,用不同的變量名訪問同一變量內容,類似于Unix的文件名和文件本身(變量名是目錄條目,變量內容是文件本身,即用不同的目錄條目訪問同一文件),可以看做Unix文件系統(tǒng)中的硬鏈接。
文件系統(tǒng)中的鏈接有兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接。硬連接指通過索引節(jié)點來進行的連接。在linux的文件系統(tǒng)中,保存在磁盤分區(qū)中的文件不管是什么類型都給它分配一個編號,稱為索引節(jié)點號(InodeIndex)。在Linux中,多個文件名指向同一索引節(jié)點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節(jié)點有一個以上的連接。只刪除一個連接并不影響索引節(jié)點本身和其它的連接,只有當最后一個連接被刪除后,文件的數據塊及目錄的連接才會被釋放。也就是說,文件才會被真正刪除。與硬連接相對應,Lnux系統(tǒng)中還存在另一種連接,稱為符號連接(Symbilc Link),也叫軟連接。軟鏈接文件有點類似于Windows的快捷方式。它實際上是特殊文件的一種。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。
引用主要用來做三件事:
引用允許允許用兩個變量指向同一個內容,如$a = & $b
,意味著$a
和$b
指向同一個變量。
如果對一個未定義的變量進行引用賦值、引用參數傳遞或引用返回,則會自動創(chuàng)建該變量。比如,下面的程序會自動創(chuàng)建變量$a
。
function foo(&$var) {}foo($a);
自PHP 5起,new
操作符自動返回引用。
用引用傳遞變量,可以通過下面的代碼實現(xiàn),foo
函數中變量$var
指向了和$a
指向的同一內容。。
<?php function foo(&$var) {$var++;}$a = 1;foo($a);echo $a;
只有函數定義中有引用符號&
,在函數調用時沒有引用符號&
。
要返回引用,使用下面的語法。
<?php class foo {public $value = 42;public function & getValue() {return $this->value;}}$obj = new foo;$myValue = & $obj->getValue();$obj->value = 2;echo $myValue;
注意,引用返回和參數傳遞不同,函數定義和函數調用(指出返回的是一個引用,而不是通常的一個拷貝)這兩個地方都用&
符號。
當unset()
一個引用時,只是斷開了變量名和變量內容之間的綁定,變量內容不被銷毀。
許多PHP的語法結構是通過引用機制實現(xiàn)的,比如global
引用和$this
指針。
當用global $var
聲明一個變量時,實際上是建立了一個到全局變量的引用,和$var = & $GLOBALS['var']
作用是相同的。在對象方法中,$this
永遠是調用它的對象的引用。
(全文完)
新聞熱點
疑難解答