php對象複製clone概述

來源:互聯網
上載者:User

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"  }  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.