PHP中物件是按值傳遞還是按引用傳遞?

2021-07-25 15:32:55 字數 1086 閱讀 3487

1.首先,什麼是按值傳遞和按引用傳遞?

按值傳遞就是僅僅把值傳遞過去,相當於傳遞的是值的拷貝,而按引用傳遞傳遞的是記憶體的位址。

按引用傳遞的特點:

$a = 2;

$b = &$a; //按引用傳遞

$a = 1;

echo

$b; //1

$b = 3;

echo

$a; //3

2.現證明php中物件不是按引用傳遞:

class

test

$test1 = new test();

$test2 = $test1;

$test1 = null;

var_dump($test1); // null

var_dump($test2); //object 如果是按引用傳遞,那麼$test2也應該為空!

3.但是,傳遞物件的時候,也出現了引用傳遞的特點:

class test

$test1

=new test();

$test1

->a =

'1';

$test2

=$test1;

$test2

->a =

'2';

echo $test1

->a; //2

$test1

->a =

'3';

echo $test2

->a; //3

出現這種情況的原因,是因為在php中,儲存物件的結構是 zend_object,乙個變數裡實際儲存的是指向該結構體的指標。變數傳遞的就是這個指標,這個指標指向的是同乙個物件。

最後,簡單說明下按值傳遞時,函式內產生的副本:

foo( $a ) 

按值傳遞的過程相當於:

foo( $a )

即:傳值建立了副本_a,並修改了副本_a,變數a並沒有改變。

由於_a為臨時變數,會在函式返回時被**掉。

四 1 函式引數是按值傳遞還是按引用傳遞

基本型別在函式引數中肯定是按值傳遞,重點是引用型別按什麼傳遞?高程中給出的是不管是基本型別還是引用型別在函式引數中都是按值傳遞。但是出現了以下這種情況 function setname obj var person new object setname person alert person.nam...

js函式傳參是按值傳遞還是按引用傳遞?

基本型別 引用型別 閒扯完了,開始寫今天要總結的基礎知識。基本型別 undefined null boolean number string五種 簡單的資料段 引用型別 object 由多個值構成 兩種型別在使用上的區別 複製變數 這塊好理解,看乙個例子的對比就秒懂 基本型別 var num1 5 ...

PHP 陣列的拷貝是按值傳遞 or 按引用傳遞

在記憶中 php 簡單變數的拷貝是按值傳遞,陣列和物件的拷貝是按引用傳遞,即通過引用來實現。簡單變數和物件好理解 簡單變數的拷貝 a human b a b cat var dump a string human length 5 物件的拷貝 class a a new a b a b name j...