php中對象引用和複製實例分析

這篇文章主要介紹了php中對象引用和複製,結合實例形式分析了php對象引用和複製的相關實現方法與操作注意事項,需要的朋友可以參考下

本文實例講述了php中對象引用和複製。分享給大家供大家參考,具體如下:

引用

$tv2 = $tv1;

或者

$tv2 = &$tv1;

以上兩種方式,效果是一樣的。可以理解爲linux裏面的硬鏈接。

克隆(淺複製)

$tv2 = clone $tv1;

“淺複製”:被複制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用都仍然指向原來的對象。也就是說,淺複製僅僅複製所考慮的對象,而不復制它所引用的對象。

深複製

$tv4 = unserialize(serialize($tv1));

相對於“淺複製”,當然也有一個“深複製”:被複制的對象的所有的變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。也就是說,深複製把要複製的對象所引用的對象都複製了一遍。

代碼示例

<?php
header("Content-type:text/html;charset=utf-8");
class TvControl{
}
class Tv{
  private $color;
  private $tvControl;
  function __construct(){
    $this->color = "black";
    $this->tvControl = new TvControl();
  }
  function setColor($color){
    $this->color = $color;
  }
  function getColor(){
    return $this->color;
  }
  function getTvControl(){
    return $this->tvControl;
  }
}
$tv1 = new Tv();
$tvControl1 = $tv1->getTvControl();
echo "原始類:";
var_dump($tv1);
echo "<hr/>";
$tv2 = $tv1;
echo "引用類:";
var_dump($tv2);
echo "<hr/>";
$tv3 = clone $tv1;
echo "克隆(淺複製):";
var_dump($tv3);
echo "<hr/>";
$tv4 = unserialize(serialize($tv1));
echo "深複製:";
var_dump($tv4);

輸出結果:

原始類:
object(Tv)[1]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[2]
引用類:
object(Tv)[1]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[2]
克隆(淺複製):
object(Tv)[3]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[2]
深複製:
object(Tv)[4]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[5]

參考文章:https://www.jb51.net/article/167631.htm

更多關於PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧彙總

希望本文所述對大家PHP程序設計有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章