程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php對象克隆clone概述

php對象克隆clone概述

編輯:PHP綜合

php 對象復制,是復制對象的引用地址,因此使用 $objA = $objB 這種寫法時,$objA與$objB會指向相同的內存地址。當$objA 發生變化時,$objB也會受到影響。

如果我們要$objA對象復制為$objB對象,復制之後,$objA有什麼變化,都不會影響$objB。即$objA與$objB是兩個獨立的對象,但$objB的初始值是由$objA創建的,比較高效的做法是使用clone()方法。

$objB = clone $objA;

$objB的值是在$objA基礎加$objA事例對象裡clone()方法改變後的實例。

當對象被復制後,所有的屬性中的引用保持不變,指向原來的變量,如果定義了__clone()方法,則新創建的對象中的__clone()方法會被調用,可用於修改屬性的值。

例子1:clone 對象

<?php  
class subclass{  
       
    private $name;  
    private $age;  
       
    public function __construct(){  
        $this->name = 'fdipzone';  
        $this->age = '30';  
    }  
       
    public function __clone(){  
        $this->name = 'xfdipzone';  
        $this->age = '29';  
    }  
       
}  
       
       
class myclass{  
       
    public $p1;  
    public $p2;  
       
    public function __construct(){  
       
    }  
       
    public function __clone(){  
        $this->p1 = clone $this->p1;  
    }  
       
}  
       
$obj = new myclass();  
$obj->p1 = new subclass();  
$obj->p2 = new subclass();  
       
$obj2 = clone $obj;  
       
echo '<pre>';  
echo 'obj<br>';  
var_dump($obj);  
echo '<br>obj2<br>';  
var_dump($obj2);  
echo 'ok';  
echo '</pre>';  
       
?>

上例將輸出:

obj  
object(myclass)#1 (2) {  
  ["p1"]=>  
  object(subclass)#2 (2) {  
    ["name":"subclass":private]=>  
    string(8) "fdipzone"
    ["age":"subclass":private]=>  
    string(2) "30"
  }  
  ["p2"]=>  
  object(subclass)#3 (2) {  
    ["name":"subclass":private]=>  
    string(8) "fdipzone"
    ["age":"subclass":private]=>  
    string(2) "30"
  }  
}  
       
obj2  
object(myclass)#4 (2) {  
  ["p1"]=>  
  object(subclass)#5 (2) {  
    ["name":"subclass":private]=>  
    string(9) "xfdipzone"
    ["age":"subclass":private]=>  
    string(2) "29"
  }  
  ["p2"]=>  
  object(subclass)#3 (2) {  
    ["name":"subclass":private]=>  
    string(8) "fdipzone"
    ["age":"subclass":private]=>  
    string(2) "30"
  }  
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved