国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php之對象復制

2019-11-08 01:30:06
字體:
來源:轉載
供稿:網友

php中可以根據現在的對象克隆出一個完全一樣的對象,克隆出來的副本和原本兩個對象完全獨立而互不干擾。

對象復制可以通過 clone 關鍵字來完成(如果可能,這將調用對象的 __clone() 方法)。對象中的__clone() 方法不能被直接調用。

當復制完成時,如果定義了 __clone() 方法,則新創建的對象(復制生成的對象)中的 __clone() 方法會被調用,可用于修改屬性的值(如果有必要的話)。 

當對象被復制后,PHP 5 會對對象的所有屬性執行一個淺復制(shallow copy)。所有的引用屬性 仍然會是一個指向原來的變量的引用。

$copy_of_object = clone $object;void__clone (void )

對象復制:

class SubObject{    static $instances = 0;    public $instance;    public function __construct() {        $this->instance = ++self::$instances;    }    }class MyCloneable{    public $object1;    public $object2;    public $name;	/*function __clone()    {              // 強制復制一份this->object, 否則仍然指向同一個對象        $this->object1 = clone $this->object1;    }      */    }$obj = new MyCloneable();$obj->object1 = new SubObject();$obj->object2 = new SubObject();$obj->name='張三';$obj2 = clone $obj;$obj->object1->instance='123';$obj2->name='李四';var_dump($obj);var_dump($obj2);

輸出結果為:

object(MyCloneable)[1]  public 'object1' =>     object(SubObject)[2]      public 'instance' => string '123' (length=3)  public 'object2' =>     object(SubObject)[3]      public 'instance' => int 2  public 'name' => string '張三' (length=6)
object(MyCloneable)[4]  public 'object1' =>     object(SubObject)[2]      public 'instance' => string '123' (length=3)  public 'object2' =>     object(SubObject)[3]      public 'instance' => int 2  public 'name' => string '李四' (length=6)

由此我們可以看到原對象的引用屬性改變會影響到克隆出來的對象的引用屬性,但原對象的普通屬性改變不會影響到克隆出來的對象的普通屬性。這就是淺復制的作用。如果我們想要使原來和復制出的對象引用屬性不相互干擾,我們可以將引用屬性再強制復制一遍


上一篇:php 存儲容量換算

下一篇:PHP常見易錯題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 锡林郭勒盟| 开平市| 兴义市| 德保县| 遵义县| 长春市| 吉隆县| 滦平县| 乌拉特中旗| 大石桥市| 安陆市| 丘北县| 临洮县| 长垣县| 通海县| 郯城县| 安阳市| 修水县| 乌苏市| 萝北县| 临桂县| 昆山市| 凭祥市| 黔南| 宣恩县| 昔阳县| 柳林县| 饶河县| 鄂托克旗| 江山市| 芮城县| 阿拉善盟| 廊坊市| 色达县| 社旗县| 荥阳市| 株洲县| 白玉县| 乐安县| 韶山市| 驻马店市|