在前面的php物件導向之物件和引用,我們試圖以"$b=$a"的方式複製物件以傳遞物件的值(內容),結果卻是傳遞物件的位址,在結尾為了解決複製物件這個問題,提到了轉殖的方法。接下來講一下php物件導向之轉殖物件。
前面我們已經知道,使用傳址引用的方式呼叫物件,實質呼叫的是同乙個物件,有時需要建設立乙個物件的副本,改變原來的物件時不希望影響到副本,在php中可以根據現在的物件來轉殖出乙個完全一樣的物件,轉殖出來的副本和原本兩個物件完全獨立而互不干擾。
物件轉殖
在php中使用"clone"關鍵字來轉殖物件。
01
<?php
02
class
person
09
function
say()
12
}
13
$person
=
new
person(
"張三"
);
14
$person1
=clone
$person
;
//使用clone關鍵字轉殖(複製)物件,建立乙個物件的副本
15
// $person1=$person //這不是複製物件,而是為物件多複製出乙個訪問該物件的引用
16
$person
->say();
17
$person1
->say();
18
19
?>
上面程式執行結果為:
我叫:張三
我叫:張三
轉殖的副本和原本擁有相同的類和屬性
1
if
(
$person
==
$person1
)
else
程式輸出:person和person1具有相同的類和屬性
轉殖的副本和原本儲存在不相同的位置
1
if
(
$person
===
$person1
)
else
程式結果為false。
轉殖的副本和原本獨立而互不干擾
我們來改變一下原本的屬性值,看一下有什麼影響
1
$person
=
new
person(
"張三"
);
2
$person1
=clone
$person
;
3
$person1
-> name=
'李四'
;
4
$person
->say();
5
$person1
->say();
程式執行結果為:
我叫:張三
我叫:李四
由此可知,轉殖出來的副本和原本兩個物件完全獨立而互不干擾。
__clone()方法
如果需要為轉殖後的副本物件轉殖時重新為成員屬性賦值,可以在類中宣告乙個魔術方法"__clone"
01
<?php
02
class
person
09
function
__clone()
12
function
say()
15
}
16
$person
=
new
person(
"張三"
);
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 這個人可以說話的方法,說出...