clone 方法和傳址區別

2022-09-02 06:06:07 字數 844 閱讀 2087

示例:

<?php

class

computer

}$comp1 = new

computer();

$comp2 = new

computer();

$comp_1 = $comp1

;

$comp_2 = clone

$comp2

;?>

在上邊示例中我們首先要理解:

1 new computer();建立了兩個物件,分別儲存在堆記憶體中不同區域,然後分別把兩個物件的位址賦值給$comp1和$comp2(儲存在棧記憶體中),所以呢兩者中誰改變都不會影響對方

2 $comp_1 = $comp1,由於$comp1是位址,所以是把位址賦值給了$comp_1,兩者都是指向的同乙個堆記憶體區域,兩者其實是乙個東西,只不過名字不同,殊途同歸

3 $comp_2 = clone $comp2 是轉殖,字面意思,就是複製,把$comp2指向的堆記憶體複製乙份,$_comp_2指向的就是複製的那塊堆記憶體

另外:在類中定義__clone()方法可以改變複製的預設行為,就是自己定義複製(自己定義的複製不一定是完全一樣的再來乙份,定義複製是翻倍還是其他什麼都可以的)

執行複製時會自動呼叫__clone()函式

<?php

class

computer

}$com1 = new

computer();

$com2 = clone

$com1

;

echo

$com2->name; //

dell

?>

傳值和傳址

let dadproto let sonproto dadproto sonproto.name 李四 console.log sonproto name 李四 age 20 console.log dadproto name 李四 age 20簡單資料型別 傳值 let a 10 let b a ...

傳值和傳址

在vb中呼叫函式或過程時,傳遞引數有兩種方式 傳址和傳值。其中vb預設為傳址方式,關鍵字byref一般可以省略。byref a as integer 表示引數a以傳址方式傳遞給函式或過程 byval a as integer 表示引數a以傳值方式傳遞給函式或過程 傳址就是把乙個存放資料的記憶體位址傳...

傳值,傳址和傳引用

傳值方式 將實參的值拷貝給函式或方法,在函式內對形參進行操作,操作的物件是實參的拷貝,對實參本身沒有影響,在函式結束返回後,形參被丟棄釋放,實參的內容不會被改變。c 一條基本原則 在預設情況下,引數只能以值傳遞的方式給函式,被傳遞到函式的只是變數的值,永遠不會是變數本身。void exchange ...