物件的複製時有三種方案:
1,直接複製 $a = $b
這種是淺拷貝,當改變$a的時候$b也會改變,因為他們指向的是同一塊堆區
2,clone複製 $a = clone $b
這種拷貝貌似是深拷貝,當$a發生變化的時候$b不會跟著變化,同時php提供了魔術方法__clone()可以自定義clone複製,哪些屬性不想被複製,複製過程中需要哪些改變,都可以在__clone()方法中自定義。
但是這種複製的方法有個缺陷,需要注意,如果類中的某個屬性的型別是另外乙個類,那麼在clone的時候這個屬性會不會被
深拷貝,是不是很尷尬,當然這點缺陷是可以通過魔術方法__clone來進行彌補的,在__clone()方法中為這個屬性new乙個新的類
就是了。
class test
public function __set($key,$value) = $value;
} public function __get($key);
} public function __clone()
}
class demo
public function __set($key,$value) = $value;
} public function __get($key);
} }
使用$t = new test('aa', 'bb',new demo('d01'));
$d = clone $t;
//$d->name='nihao';
$d->demo->name = 'd02';
var_dump($t); //結果 $t->demo->name d02
clone彌補
public function __clone()
3,序列化複製
$b = unserialize(serialize($t));
這樣不需要使用clone魔術方法既可以實現屬性中引用型別的深拷貝了。 PHP轉殖物件clone
有的時候我們需要在乙個專案裡面,使用兩個或多個一樣的物件,如果你使用 new 關鍵字重新建立物件的話,再賦值上相同的屬性,這樣做比較煩瑣而且也容易出錯,所以要根據乙個物件完全轉殖出乙個一模一樣的物件,是非常有必要的,而且轉殖以後,兩個物件互不干擾。class person 這個人可以說話的方法,說出...
php類和物件 clone 轉殖
在php5中,物件的傳遞方式預設為引用傳遞,如果我們想要在記憶體中生成兩個一樣的物件或者建立乙個物件的副本,這時可以使用 轉殖 物件的複製是通過關鍵字 clone 來實現的。用 clone 轉殖出來的物件與原物件沒有任何關係,它是把原來的物件從當前的位置重新複製了乙份,也就是相當於在記憶體中新開闢了...
PHP物件導向與面向過程例項
資料庫使用mysql資料庫,分別實現面向過程 物件導向與資料庫互動的例項 test.sql 物件導向例項資料庫test create database test default character set utf8 collate utf8 general ci use test 使用者表 crea...