php值傳參,引用傳參以及 物件傳參

2022-05-17 01:19:30 字數 3448 閱讀 4347

傳值:是把實參的值賦值給行參 ,那麼對行參的修改,不會影響實參的值

說明:傳值:根copy是一樣的。打個比方,我有一橦房子,我給你建築材料,你建了乙個根我的房子一模一樣的房子,你在你的房子做什麼事都不會影響到我,我在我的房子裡做什麼事也不會影響到你,彼此獨立。

傳引用:讓我想起了上大學時學習c語言的指標了,感覺差不多。打個比方,我有一橦房子,我給你一把鑰匙,我們二個都可以進入這個房子,你在房子做什麼都會影響到我。

一,php例項

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.'

';

?>

6,物件傳遞與&物件傳遞

<?php

class

a3

class

b3

function normalassignment($obj)

function referenceassignment(&$obj)

$a = new

a3; normalassignment(

$a);

echo

get_class($a), "\n";//

輸出a3

echo "foo = \n";//

輸出foo = changed

referenceassignment(

$a);

echo

get_class($a), "\n";//

輸出b3 關鍵理解這裡為什麼

echo "foo = \n";//

foo = empty

echo "bar = \n";//

bar = hello

?>

PHP物件傳值 引用傳值

物件傳值本質上是引用傳值,將乙個物件變數 a 賦值給另個變數 b 實際上是將 a儲存的物件記憶體引用位址賦值 b,此時兩個變數指向的就是乙個物件。其中乙個變數傳送改變,另乙個也會跟著改變。和引用變數乙個道理。1.物件傳值示例 物件傳值本質上就是引用傳值 a new user b a 物件傳值 var...

C 引用方式傳參,傳值方式傳參( )

1 引用方式傳參 引用相當於是外部變數的別名,實際操作的就是該變數,即在函式內對該變數進行修改的話,在外部該變數也會相應被修改。外部變數的值也會被修改 void changeref int ref 2 傳值方式傳參 實際上是複製了乙個外部變數的副本進入函式中,在函式內操作的為該副本,對該變數的修改並...

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...