PHP引用符 的用法詳細解析

2021-06-18 01:17:49 字數 2067 閱讀 5201

php中引用符&的用法。

關於php的引用(就是在變數或者函式、物件等前面加上&符號)的作用,我們先看下面這個程式。

<?php  

$a = 100; //宣告變數a

$b = &$a; //宣告變數b,引用自變數a

echo "$a

";

echo "$b

";

$a++; //變數a自增1

echo "$a

"; //by www.jbxue.com

echo "$b

";//檢視變數b,也增加了1,說明使用的是同一儲存單元

?>

程式執行結果:

100   

100   

101   

101 

很多人誤解php中的引用跟c當中的指標一樣,事實上並非如此,而且很大差別。c語言中的指標除了在陣列傳遞過程中不用顯式申明外,其他都需要使用*進行定義,而php中對於位址的指向(類似指標)功能不是由使用者自己來實現的,是由zend核心實現的,php中引用採用的是「寫時拷貝」的原理,就是除非發生寫操作,指向同乙個位址的變數或者物件是不會被拷貝的。

php預設為傳值傳遞:

<?php      

$a = 20;

$b = $a;

$a = $a + 10;

echo $a.' and '.$b;

?>

程式執行結果:

30 and 20

<?php  

$a = 20;

$b = &$a;

$a = $a + 10;

echo $a.' and '.$b;

?>

程式執行結果:

30 and 30

也就是說,&把$a的位址傳給了$b,這樣的話這兩個變數現在共享乙個記憶體的儲存區域,就是說它們的值是一樣的。

同樣的語法可以用在函式中,它返回引用,以及用在 new 運算子中:

<?php  

$bar =& new fooclass();

$foo =& find_var($bar);

?>

引用做的第二件事是用引用傳遞變數。這是通過在函式內建立乙個本地變數,並且該變數在呼叫範圍內引用了同乙個內容來實現的。說的通俗點就是乙個函式的引數是乙個本地變數的引用。

例子:

<?php  

function foo(&$val1, $val2)

$a=5;

$b=10;

foo($a,$b);

echo $a;

echo $b;

?>

執行這段**是給函式傳遞兩個引數,乙個是引用$a的內容,乙個是$b的值,在執行此函式後,發現$a的內容改變了,而$b的內容則沒有變化。

php引用的第三個用法是引用返回,這個用法理解起來有點難度,引用返回用在當你想用函式找到引用應該被繫結在哪乙個變數上面時。當返回引用時,使用此語法:說的簡單點,就還是引用函式的返回。但和引數傳遞不同,必須在函式定義和函式引用這兩個地方都用 & 符號。下面舉個例子:

<?php  

function &find_var ($param)

$foo =& find_var ($bar);

$foo->x = 2;

?>

這個例子給$foo 賦值是函式find_var的返回引用,所以在給$foo->x賦值時就是給find_var的返回引用賦值,而不是簡單的賦值。

php引用的最後乙個用法是引用定位,主要有兩個應用:乙個是global 引用,當用 global $var 宣告乙個變數時實際上建立了乙個到全域性變數的引用。也就是和$var =& $globals["var"];是一樣的。另外乙個是$this的用法,在乙個物件的方法中,$this 永遠是呼叫它的物件的引用。

PHP引用符 的用法詳細解析

2019獨角獸企業重金招聘python工程師標準 關於php的引用 就是在變數或者函式 物件等前面加上 符號 的作用,我們先看下面這個程式。a 100 宣告變數a b a 宣告變數b,引用自變數a echo a echo b a 變數a自增1 echo a by www.jbxue.com echo...

PHP引用符 的用法詳細解析

關於php的引用 就是在變數或者函式 物件等前面加上 符號 的作用,我們先看下面這個程式。複製 如下 a 100 宣告變數a b a 宣告變數b,引用自變數a echo a echo b a 變數a自增1 echo a echo b 檢視變數b,也增加了1,說明使用的是同一儲存單元 程式執行結果 複...

PHP引用符 的用法介紹

關於php的引用 就是在變數或者函式 物件等前面加上 符號 的作用,我們先看下面這個程式。1 2 a 100 宣告變數a 3 b a 宣告變數b,引用自變數a 4echo a 5echo b 6 a 變數a自增1 7echo a 8echo b 檢視變數b,也增加了1,說明使用的是同一儲存單元 9?...