引用是個很奇妙的東西,有點類似c中的指標,但是又不一樣!在php中,引用只是
變數內容的另外乙個名字。下面我打幾個比方說明一下(只是php4的內容,php5中
關於類和物件的用法有很大的變化,還沒有仔細研究過):
1、 $a =& $b;
這裡建立了乙個引用$a, 他指向變數名為$b的變數所指向的變數內容,羅嗦一點了
啊。打個比喻:就好比乙個抽屜裡面有乙個蛋糕,b有鑰匙,現在b複製了一把鑰匙
給a,a和b都可以開啟這個抽屜,吃這個蛋糕。
2、將乙個返回應用的操作繫結到乙個變數:
$a =& new someclass();
$a =& call_function();
new操作符返回someclass的例項的拷貝,通過引用操作符,將這個拷貝綁
定到$a上,也就是說$a指向這個例項。如果是使用賦值操作符=,那麼將
複製這個例項,並且讓$a指向這個新複製的例項上。
3、引用傳遞
function somefunction(&$a)
$a = 10;
somefuntion($a);
// now $a is 20
通過這個方法,可以在函式範圍內操作函式範圍外的變數了。這個用法感
覺就和c裡面的指標比較類似。比如我寫乙個開啟檔案的函式。
function opensomefile(&$fd) else
}然後就可以和c寫很相識的程式了:
// 初始化兩個變數
$fd = null;
$error = null;
if (opensomefile($fd)) else
注意,這裡只需要在定義函式的時候,在形參前面加上&符號,在呼叫這
個函式的地方就不需要了。這個和下面的引用返回不一樣!
4、引用返回
function &foo()
$refa =& foo();
這裡函式foo中建立了乙個物件,$a 就是這個物件的引用,函式返回的是
這個引用。我們想在函式外部使用這個物件,就需要使用這樣的方法,
$refa =& foo(); 這一句話將函式foo返回的引用繫結到變數$refa上,也
就是說$refa和foo內部的$a指向同乙個內容。
注意這裡在定義函式和呼叫函式的地方都要有&符號。
這種方法在使用factory模式設計程式的時候經常用到,比如pear::db庫
等等。5、使用unset($var)來銷毀乙個引用的時候,不會銷毀$var指向的內容:
$a = 10;
$b =& $a;
echo $a;
echo "/n";
echo $b;
echo "/n";
unset($b);
echo $a;
如上**,unset($b),並不會讓$a也產生變化。還是抽屜和鑰匙,a和b
都有同乙個抽屜的鑰匙。b把鑰匙扔掉,但是a還有,還是可以開啟抽屜。
6、我剛剛遇到的乙個問題:
function foo(&$a)
$aaa = null;
foo($aaa);
這樣的用法並不能讓$aaa指向someclass的乙個例項。為什麼呢?因為在
呼叫foo的時候,形參$a是乙個指向$aaa的引用,即$a =& $aaa;然後在函
數內部,$a又被重新指向另乙個物件了。所以,並沒有操作$aaa。就像b
從a那裡得到開抽屜甲的鑰匙,但是不巧的是,他將這把鑰匙做成開抽屜
乙的了,那麼他自然不能再開抽屜甲咯。
學習筆記 php php中的引用
php的引用 就是在變數或者函式前面加上 符號 最重要就是 刪除引用的變數 只是引用的變數訪問不了,但是內容並沒有銷毀 在php 中引用的意思是 不同的名字訪問同乙個變數內容.1.變數引用 從下面的例子可以看出,使用 對變數進行引用傳遞後,改變任何乙個變數的值都會影響到訪問這個變數內容的變數。a 1...
PHP PHP引用的簡單解釋
php的引用意味著我們可以用不同的名字來訪問同樣的內容。指標也是一樣的,可以有不同名字的指標,訪問同樣的內容。但是,php的引用並不是指標。引用並不能訪問記憶體。實際上,我們可以把引用理解為unix系統的硬鏈結。a hello world b a a和 b在這裡是完全相同的,這並不是 a指向了 b或...
PHP php中的 作用
對於這個 符號,之前很少在意,只知道它是錯誤遮蔽的符號。今天再一次接觸到了它,不得不認真了解一下,這面這段資料我是在網上找到的,也是我認為講得比較清楚的資料。是可以遮蔽函式執行過程中遇到問題而產生的一些錯誤 警告資訊,這樣使用者就看不到程式的出錯資訊。這樣除了使用者介面會友好一些外,更重要的是安全性...