php物件導向之轉殖物件

2022-07-31 05:42:11 字數 3267 閱讀 7551

在前面的php物件導向之物件和引用,我們試圖以"$b=$a"的方式複製物件以傳遞物件的值(內容),結果卻是傳遞物件的位址,在結尾為了解決複製物件這個問題,提到了轉殖的方法。接下來講一下php物件導向之轉殖物件

前面我們已經知道,使用傳址引用的方式呼叫物件,實質呼叫的是同乙個物件,有時需要建設立乙個物件的副本,改變原來的物件時不希望影響到副本,在php中可以根據現在的物件來轉殖出乙個完全一樣的物件,轉殖出來的副本和原本兩個物件完全獨立而互不干擾。

物件轉殖

在php中使用"clone"關鍵字來轉殖物件。

01<?php

02classperson

09functionsay()

12}

13$person=newperson("張三");

14$person1=clone$person;//使用clone關鍵字轉殖(複製)物件,建立乙個物件的副本

15// $person1=$person   //這不是複製物件,而是為物件多複製出乙個訪問該物件的引用

16$person->say();

17$person1->say();

18

19?>

上面程式執行結果為:

我叫:張三

我叫:張三

轉殖的副本和原本擁有相同的類和屬性

1if($person==$person1)else

程式輸出:person和person1具有相同的類和屬性

轉殖的副本和原本儲存在不相同的位置

1if($person===$person1)else

程式結果為false。

轉殖的副本和原本獨立而互不干擾

我們來改變一下原本的屬性值,看一下有什麼影響

1$person=newperson("張三");

2$person1=clone$person;

3$person1-> name='李四';

4$person->say();

5$person1->say();

程式執行結果為:

我叫:張三

我叫:李四

由此可知,轉殖出來的副本和原本兩個物件完全獨立而互不干擾。

__clone()方法

如果需要為轉殖後的副本物件轉殖時重新為成員屬性賦值,可以在類中宣告乙個魔術方法"__clone"

01<?php

02classperson

09function__clone()

12functionsay()

15}

16$person=newperson("張三");

17$person1=clone$person;

18$person->say();

19$person1->say();

20

21?>

程式執行結果為:

我叫:張三

我叫:李四

php物件轉殖

created by phpstorm.user tusi date 2017 8 25 time 10 21 class subobject 建構函式,每例項化物件一次,將公有屬性 instance值加1 public function clone 物件複製函式,如果物件中定義了 clone方法,...

php物件轉殖

思考 物件只能通過例項化產生,而且即便是將物件複製給變數,得到的還是同乙個物件,如果有的時候需要得到新的物件,除了例項化之外還有其他辦法?引入 物件理論上應該通過例項化來產生,這是物件產生的根本,但是有時候如果想在已有的物件上產生乙個新的物件,可以通過轉殖來實現。定義 轉殖物件clone,即通過已有...

PHP轉殖物件clone

有的時候我們需要在乙個專案裡面,使用兩個或多個一樣的物件,如果你使用 new 關鍵字重新建立物件的話,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯,所以要根據乙個物件完全轉殖出乙個一模一樣的物件,是非常有必要的,而且轉殖以後,兩個物件互不干擾。class person 這個人可以說話的方法,說出...