php中傳值與傳引用的區別

2021-07-25 07:14:13 字數 2488 閱讀 4718

1,傳值

<?php

$param1=1; //定義變數1

$param2=2; //定義變數2

$param2 = $param1; //變數1賦值給變數2

echo

$param2; //顯示為1

?>

2,傳引用

<?php

$param2=1; //定義變數2

$param1 = &$param2; //將變數2的引用傳給變數1

echo

$param2; //顯示為1

$param1 = 2; //把2賦值給變數1

echo

$param2; //顯示為2

?>

3,函式傳值

<?php

//傳值

$param1 = 1; //定義變數1

function

add($param2) //傳引數

$param3=add($param1); //呼叫方法add,並將變數1傳給變數2

echo

'$param1=='.$param1.'

'; //顯示為$param1==1

echo

'$param2=='.$param2.'

'; //顯示為$param2== 因為$param2是區域性變數,所以不能影響全域性

echo

'$param3=='.$param3.'

'; //顯示為$param3== 因為add方法沒有返回值,所以$param3為空

?>

4,函式傳引用

<?php

//傳值

$param1 = 1; //定義變數1

function

add(&$param2) //傳引數

echo

'$param1=='.$param1.'

'; //顯示為$param1==1 沒對變數1進行操作

$param3=add($param1); //呼叫方法add,並將變數1的引用傳給變數2

echo

'$param1=='.$param1.'

'; //顯示為$param1==3 呼叫變數過程中,$param2的改變影響變數1,雖然沒有return

echo

'$param2=='.$param2.'

'; //顯示為$param2== 因為$param2區域性變數,所以不能影響全域性

echo

'$param3=='.$param3.'

'; //顯示為$param3== 如果把方法裡面的return注釋去掉的話就為$param3==3

?>

5,函式傳引用2

<?php 

//傳引用

$param1 = 1;

function &add(&$param2)

$param3=&add($param1);

$param4=add($param1);

echo

'$param3=='.$param3.'

'; //顯示為$param3==2

echo

'$param4=='.$param4.'

'; //顯示為$param4==2

echo

'$param1=='.$param1.'

'; //顯示為$param1==2 呼叫變數過程中,$param2的改變影響變數1

$param3++;

/*下面顯示為$param1==3,這是因為$param2和$param1引用到同乙個地方,

* 返回值前面加了位址符號還是乙個引用$param3=&add($param1);

* 這樣$param3,$param2和$param1引用到同乙個地方,當$param3++;時,

* $param1會被改變*/

echo

'$param1=='.$param1.'

'; $param4++;

/* 下面顯示為$param1==3,這裡為什麼是3而不是4呢,這是因為返回值前面沒有

* 位址符號,它不是乙個引用所以當$param4改變時不會影響$param1*/

echo

'$param1=='.$param1.'

'; ?>

不過我覺得傳引用會好一點,耗的資源少。上面測試沒有明顯的差距,可能是因為測試資料不夠大造成的,如果有更大資料來測試,我想會有明顯的不同。

按值傳遞:函式範圍內對值的任何改變在函式外部都會被忽略 按引用傳遞:函式範圍內對值的任何改變在函式外部也能反映出這些修改 優缺點:按值傳遞時,php必須複製值。特別是對於大型的字串和物件來說,這將會是乙個代價很大的操作。 按引用傳遞則不需要複製值,對於效能提高很有好處。

PHP的傳值與引用,php傳值和傳引用區別

php傳值 在函式範圍內,改變變數值得大小,都不不會影響到函式外邊的變數值。testa 1 定義變數a testb 2 定義變數b testb testa 變數a賦值給變數b echo testb 顯示為1 傳引用 類似於c語言的指標了,感覺差不多。打個比方,我有一橦房子,我給你一把鑰匙,我們二個都...

php中 傳值 和 傳引 用的區別

傳值 是把實參的值賦值給行參 那麼對行參的修改,不會影響實參的值 傳位址 是傳值的一種特殊方式,只是他傳遞的是位址,不是普通的如int 那麼傳位址以後,實參和行參都指向同乙個物件 b a b的位址指向 a的位址,兩者指向同乙個物件傳引用 真正以位址的方式傳遞引數後,行參和實參都是同乙個物件,只是他們...

php中傳值和傳引用的區別?

之前也有理解過傳值和傳引用的不同,但是好腦袋不如個爛筆頭,還是記錄下來分享下來沒事多看看吧傳值的話 如果是非物件,會傳乙個值的拷貝,對這個變數做任何改動都不影響原值。傳引用或者傳物件,是傳真實的記憶體位址,對這個變數做的改動會影響原值。不多說看 好理解呢 function func1 a funct...