PHP4 中的引用

2021-03-31 08:56:58 字數 1804 閱讀 7793

引用是個很奇妙的東西,有點類似c中的指標,但是又不一樣!在php中,引用只是變數內容的另外乙個名字。下面我打幾個比方說明一下(只是php4的內容,php5中關於類和物件的用法有很大的變化,還沒有仔細研究過):

1、 $a =& $b;

這裡建立了乙個引用$a, 他指向變數名為$b的變數所指向的變數內容,羅嗦一點了啊。打個比喻:就好比乙個抽屜裡面有乙個蛋糕,b有鑰匙,現在b複製了一把鑰匙給a,a和b都可以開啟這個抽屜,吃這個蛋糕。

2、將乙個返回應用的操作繫結到乙個變數:

code

$a =& new someclass();

$a =& call_function();

new操作符返回someclass的例項的拷貝,通過引用操作符,將這個拷貝繫結到$a上,也就是說$a指向這個例項。如果是使用賦值操作符=,那麼將複製這個例項,並且讓$a指向這個新複製的例項上。

3、引用傳遞

code

function somefunction(&$a)

$a = 10;

somefuntion($a);

// now $a is 20

通過這個方法,可以在函式範圍內操作函式範圍外的變數了。這個用法感覺就和c裡面的指標比較類似。比如我寫乙個開啟檔案的函式。

code

function opensomefile(&$fd) else

}然後就可以和c寫很相識的程式了:

code

// 初始化兩個變數

$fd    = null;

$error = null;

if (opensomefile($fd)) else

注意,這裡只需要在定義函式的時候,在形參前面加上&符號,在呼叫這個函式的地方就不需要了。這個和下面的引用返回不一樣!

4、引用返回

code

function &foo()

$refa =& foo();

這裡函式foo中建立了乙個物件,$a 就是這個物件的引用,函式返回的是這個引用。我們想在函式外部使用這個物件,就需要使用這樣的方法,$refa =& foo(); 這一句話將函式foo返回的引用繫結到變數$refa上,也就是說$refa和foo內部的$a指向同乙個內容。

注意這裡在定義函式和呼叫函式的地方都要有&符號。

這種方法在使用factory模式設計程式的時候經常用到,比如pear::d

b庫等等。

5、使用unset($var)來銷毀乙個引用的時候,不會銷毀$var指向的內容:

code

$a = 10;

$b =& $a;

echo $a;

echo "/n";

echo $b;

echo "/n";

unset($b);

echo $a;

如上**,unset($b),並不會讓$a也產生變化。還是抽屜和鑰匙,a和b都有同乙個抽屜的鑰匙。b把鑰匙扔掉,但是a還有,還是可以開啟抽屜。

6、我剛剛遇到的乙個問題:

code

function foo(&$a)

$aaa = null;

foo($aaa);

這樣的用法並不能讓$aaa指向someclass的乙個例項。為什麼呢?因為在呼叫foo的時候,形參$a是乙個指向$aaa的引用,即$a =& $aaa;然後在函式內部,$a又被重新指向另乙個物件了。所以,並沒有操作$aaa。就像b從a那裡得到開抽屜甲的鑰匙,但是不巧的是,他將這把鑰匙做成開抽屜乙的了,那麼他自然不能再開抽屜甲咯

PHP4和PHP5中的引用

php提供了引用操作符 在php中引用的意思是用不同的名字訪問同乙個變數內容,php4和php5中的物件引用是有區別的。a 8 b a echo a a 8 echo b b 8 a 12 echo a a 12 echo b b 8 首先建立變數 a,把整數8賦值給 a,然後把 a賦給 b,這時候...

php 4 魔術常量

line 檔案中的當前行號。echo 這是第 line 行 這是第 9 行 file 檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名。自 php 4.0.2 起,file 總是包含乙個絕對路徑 如果是符號連線,則是解析後的絕對路徑 而在此之前的版本有時會包含乙個相對路徑。echo 該...

php 4大基礎演算法

氣泡排序 思路 每次迴圈排列出乙個最大的數 public function mao paoop this response data,2000 選擇排序 思路 每一趟在n i 1 i 1,2,n 1 個記錄中選擇關鍵字最小的記錄作為有序序列中第i個記錄,其中最簡單的是簡單選擇排序,其過程如下 通過n...