<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### **clone關鍵字** **用于克隆一個完全一樣的對象,克隆之后兩個對象互不干擾。** > 適用場景:在編碼過程中,有一個對象A,在某一時刻A中已經包含了一些有效值,此時可能會需要一個和A完全相同新對象B,并且此后對B任何改動都不會影響到A中的值,也就是說,A與B是兩個獨立的對象,但B的初始值是由A對象確定的。 ``` // 使用clone關鍵字之前的復制效果實例 // // 定義一個類,類中定義一個公共成員變量 class TestClass { public $value; } $obj = new TestClass(); // 實例化TestClass類的對象 $obj->value = 'qq'; // 給成員變量賦值 var_dump($obj); // object(TestClass)#228 (1) { ["value"]=> string(2) "qq" } $obj2 = $obj; // 將$obj賦值給$obj2變量,等同于復制一個$obj $obj2->value = 'zz'; // 更改$value的值 var_dump($obj); // object(TestClass)#228 (1) { ["value"]=> string(2) "zz" } var_dump($obj2); // object(TestClass)#228 (1) { ["value"]=> string(2) "zz" } ``` 從以上的例子可以看出來當實例化對象賦值給其他變量時,改變實例化對象和改變賦值對象,另一方都會隨之改變。這是因為普象的賦值,僅僅是把新對象指向對象存儲的地址(即 $obj給了$obj2它的地址,就和引用一樣,$obj2指向了$obj,所以導致兩者所執行的操作將會收到影響)。 ``` // 使用clone關鍵字之后的復制效果實例 // // 定義一個類,類中定義一個公共成員變量 class TestClass { public $value; } $obj = new TestClass(); // 實例化TestClass類的對象 $obj->value = 'qq'; // 給成員變量賦值 var_dump($obj); // object(TestClass)#228 (1) { ["value"]=> string(2) "qq" } $obj2 = clone $obj; // 使用clone關鍵字克隆$obj $obj2->value = 'zz'; // 更改$value的值 var_dump($obj); // object(TestClass)#228 (1) { ["value"]=> string(2) "qq" } var_dump($obj2); // object(TestClass)#228 (1) { ["value"]=> string(2) "zz" } ``` 可以看出,使用clone關鍵字之后,更改$obj2的成員變量值并不會對$obj的成員變量產生影響,克隆之后的兩個對象$obj和$obj2是互不影響,互相獨立的。 ### **__clone方法** **用于重寫原本的屬性和方法;__clone() 方法只會在對象被克隆的時候自動調用。** > __clone()方法對一個對象實例進行的淺復制,對象內的基本數值類型進行的是傳值復制,而對象內的對象型成員變量,如果不重寫__clone方法,顯式的clone這個對象成員變量的話,這個成員變量就是傳引用復制,而不是生成一個新的對象。 ``` // 定義age類 class Age { public $balance; public function __construct($balance) { $this->balance = $balance; } } // // 定義第二個類,類中包括兩個公共成員以及構造函數、克隆方法 class IndexService { public $age; // 對象屬性成員變量 public $name; // 非對象屬性成員變量 public function __construct($name, Age $age) { $this->name = $name; $this->age = $age; } // 使用clone的時候觸發 public function __clone() { $this->name = 'name:'.$this->name; $this->age = clone $this->age; // 這個對象會被強制復制,這樣就不會指向原來的對象。 } } // 運行 $obj = new IndexService('peter',new Age(20)); $obj2 = clone $obj; $obj2->age->balance = 10; var_dump($obj); var_dump($obj2); // age對象中的balance值更改為10,name值也被更改。 ``` ![](https://img.kancloud.cn/02/dc/02dcaea6a562a59a69e4a01b3e9a638f_511x254.png) > 注意: __clone()方法中的clone操作只能用于對象,如果用于非對象屬性,將會報錯:# 致命錯誤: __clone method called on non-object。 > 例子中的age就是一個對象。 以上例子中,$age對象被強制復制,不會指向原來的對象,所以修改其中的值之后,并不會對原來對象有影響;如果不加上`$this->age = clone $this->age;`這行代碼,運行結果則變成這樣:兩個對象的age對象的balance值都改成了10。 ![](https://img.kancloud.cn/90/70/90707a423336d80e3f668733f7cbe758_526x251.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看