php function test 引用詳解

2021-07-16 08:51:40 字數 1913 閱讀 6329

php的引用(就是在變數或者函式、物件等前面加上&符號)

在php 中引用的意思是:不同的名字訪問同乙個變數內容。

與c語言中的指標是有差別的.c語言中的指標裡面儲存的是變數的內容,在記憶體中存放的位址。

1.變數的引用

php 的引用允許你用兩個變數來指向同乙個內容

$a="abc";

$b =&$a;

echo $a;//這裡輸出:abc

echo $b;//這裡輸出:abc

$b="efg";

echo $a;//這裡$a的值變為efg 所以輸出efg

echo $b;//這裡輸出efg

2.函式的引用傳遞(傳址呼叫)

傳址呼叫我就不多說了 下面直接給出**

function test(&$a)

$b=1;

echo $b;//輸出1

test($b); //這裡$b傳遞給函式的其實是$b的變數內容所處的記憶體位址,通過在函式裡改變$a的值 就可以改變$b的值了

echo "

"; echo $b;//輸出101

要注意的是,在這裡test(1);的話就會出錯,原因自己去想。

注意:

上面的「 test($b); 」 中的$b前面不要加 & 符號,但是在函式「call_user_func_array」中,若要引用傳參,就得需要 & 符號,如下**所示:

function a(&$b)

$c=0;

call_user_func_array('a',array(&$c));

echo $c;//輸出 1

3.函式的引用返回

先看段**:

function &test()

$a=test();//這條語句會輸出 $b的值 為1

$a=5;

$a=test();//這條語句會輸出 $b的值 為2

$a=&test();//這條語句會輸出 $b的值 為3

$a=5;

$a=test();//這條語句會輸出 $b的值 為6

下面解釋下: 

通過這種方式$a=test();得到的其實不是函式的引用返回,這跟普通的函式呼叫沒有區別 至於原因:這是php的規定php規定通過$a=&test(); 方式得到的才是函式的引用返回

至於什麼是引用返回呢(php手冊上說:引用返回用在當想用函式找到引用應該被繫結在哪乙個變數上面時。) 這句狗屁話 害我半天沒看懂

用上面的例子來解釋就是

$a=test()方式呼叫函式,只是將函式的值賦給$a而已,而$a做任何改變都不會影響到函式中的$b而通過$a=&test()方式呼叫函式呢, 他的作用是將return $b中的$b變數的記憶體位址與$a變數的記憶體位址指向了同乙個地方

即產生了相當於這樣的效果($a=&$b;) 所以改變$a的值也同時改變了$b的值所以在執行了

$a=&test();

$a=5;

以後,$b的值變為了5

class talker

public function out()

}$aa = new talker();

$d = &$aa->get();

$aa->out();

$d = 'how';

$aa->out();

$d = 'are';

$aa->out();

$d = 'you';

$aa->out();

the output is 「hihowareyou」

c 值型別和引用型別詳析

1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...

vs2010建立web服務以及引用服務詳細步驟

2012 10 15 12 50 vip 無趣 分類 使用 瀏覽5773次 webservice 2012 10 16 11 53 提問者採納 在vs2010裡面 其實不建議用web service的,正如一樓說的 用wcf。1.我們新建乙個web service asmx結尾的 2.我們在新建的可...

Informatica Update 機制詳解

informatica update 機制詳解 informatica 作為etl工具,update是其很重要的乙個特性。也正因為如此,我們會發現在informatica工具的很多地方都會有update的相關設定,許多時候給大家都造成了很大的迷惑,不知道誰先誰後,誰的優先順序高,或者具體的作用是什麼...