PHP物件導向之物件傳值方式

2022-04-29 17:03:12 字數 2007 閱讀 6470

1

<?php 2//

宣告乙個變數並賦值

3$a = 1;4//

將資料型別的值 賦值 給乙個變數

5$b = $a;6

7//修改$a的值

8$a = 2;9//

$a和$b是兩個獨立的記憶體空間修改其中乙個另乙個不受影響

10echo

$b; //

1 11

12class

person

1317

//將物件型別的資料 賦值 給乙個變數

18$p = new

person;

19//

通過對屬性修改值,來確定物件導向中 物件的傳值方式

20$p->name = 'jesse';

21//

若是成功修改值,則是引用傳值

22echo

$p->name; //

jesse

23 ?>

案例解釋: 

在這裡通過變數的賦值方式 與 物件的賦值方式方式相對比,**第5行中的賦值方式為「拷貝賦值」,故在修改其源值($a的值)的情況下,$b的值不受影響。$a與$b的記憶體關係圖如下:

而**20行將資料型別賦值給$p變數,通過$p修改物件內部的值成功,對比變數的傳值方式,證明這是引用傳值,記憶體關係圖如下:

這兩種最基本的搞清楚後,我們對物件導向傳值方式進行加深,請看一下**:

1

<?php

2class

person37

//將物件型別的資料 賦值 給乙個變數

8$p = new

person;9//

通過對屬性修改值,來確定物件導向中 物件的傳值方式

10$p->name = 'jesse';

11//

將物件賦予另一變數

12$m = $p;13

//另一變數修改屬性值

14$m->name = 'marry';

15//

輸出源變數 賦值變數訪問內部屬性的結果

16echo

$p->name, $m->name;

17 ?>

第12行**為本篇文章的最「點睛」的**,等號右邊為是乙個物件,左邊是乙個變數,那麼犀利的問題來了,$m是將物件拷貝乙份?還是按引用傳遞呢?該**記憶體關係如下:

所以,最後兩個物件的屬性值均被修改為marry!!!

那按引用傳值會是怎麼個情況?

1

<?php

2class

person37

//將物件型別的資料 賦值 給乙個變數

8$p = new

person;9//

通過對屬性修改值,來確定物件導向中 物件的傳值方式

10$p->name = 'jesse';

11//

將物件賦予另一變數

12$m = &$p;13

//另一變數修改屬性值

14$m->name = 'marry';

15//

輸出源變數 賦值變數訪問內部屬性的結果

PHP物件傳值 引用傳值

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

php物件導向之轉殖物件

在前面的php物件導向之物件和引用,我們試圖以 b a 的方式複製物件以傳遞物件的值 內容 結果卻是傳遞物件的位址,在結尾為了解決複製物件這個問題,提到了轉殖的方法。接下來講一下php物件導向之轉殖物件。前面我們已經知道,使用傳址引用的方式呼叫物件,實質呼叫的是同乙個物件,有時需要建設立乙個物件的副...

python 實現按物件傳值

今天研究了下中的傳值問題,通常在c c 中有按值傳遞和按引用傳遞兩種情況,按值傳遞時會拷貝實參,而按引用傳遞時只是給形參賦了乙個指向實參的指標,但在python卻沒有區分這兩種情況。通過並實際測試,確實發現python沒有按值或者按引用來進行區別,對不同的引數物件還是按python基本型別的處理方式...