PHP编程中的__clone()方法使用详解
可以在对象类中定义一个__clone()方法来调整对象的克隆行为。此方法的代码将在克隆操作期间执行。除了将所有现有对象成员复制到目标对象之外,还会执行__clone()方法指定的操作。下面修改Corporate_Drone类,增加以下方法: tiecolor = "blue";
}
之后,创建一个新的Corporate_Drone对象,增加employeeid成员的值,克隆这个对象,然后输出一些数据,从而显示克隆对象的tiecolor确实是通过__clone()方法设置的。示例代码: // Set the $drone1 employeeid member
$drone1->setEmployeeID("12345"); // Clone the $drone1 object // Set the $drone2 employeeid member // Output the $drone1 and $drone2 employeeid members 程序运行结果 再来一个小例子: public function setName($name){
$this->name = $name; } public function setColor($color){ function showColor(){ function __destruct(){ $apple = new Fruit(); $clone_apple = $apple; echo $clone_apple->showColor(); 上面只是将一个类赋值给另一个类,所以此时内存中仍是一个对象。 public function setName($name){
$this->name = $name; } public function setColor($color){ function showColor(){ function destruct(){ $apple = new Fruit(); $clone_apple = clone $apple; echo $clone_apple->showColor(); clone方法克隆出了一个新的类,所以此时内存中有两个对象。 php的__clone()方法对一个对象实例进行的浅复制,对象内的基本数值类型进行的是传值复制,而对象内的对象型成员变量,如果不重写__clone方法,显式的clone这个对象成员变量的话,这个成员变量就是传引用复制,而不是生成一个新的对象.如下面一个例子的第28行注释所说 public function __construct($balance) {
$this->balance = $balance;
}
} class Person {
} $person = new Person("peter",15,new Account(1000)); $person2->account->balance = 250; var_dump($person,$person2); ?> 输出: 代码如下: int(1) ["name":"Person":private]=> string(5) "peter" ["age":"Person":private]=> int(15) ["account"]=> object(Account)#2 (1) { ["balance"]=> int(1000) } } object(Person)#3 (4) { ["id":"Person":private]=> int(0) ["name":"Person":private]=> string(5) "peter" ["age":"Person":private]=> int(15) ["account"]=> object(Account)#4 (1) { ["balance"]=> int(250) } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |