關于 PHP 中的 clone 與
在 PHP 中,我們經常需要對于對象進行拷貝操作,那么 clone 與 就成為了我們常常接觸的關鍵詞。在本文中,我們將深入探討這兩個操作,讓大家更好的使用它們來完成對于對象的拷貝操作。
clone 與 的區別
clone 與 的作用都是對于對象的拷貝,但是它們卻有著本質不同的區別。clone 的作用是復制一個對象,賦值給一個新變量,這個新變量和原有的對象是完全獨立的。換句話說,對于新對象的任何修改都不會影響到原有的對象。例如:
class Foo { public $name = 'bar'; } $foo = new Foo(); $foo2 = clone $foo; $foo2->name = 'baz'; echo $foo->name;//bar echo $foo2->name;//baz可以從上面的代碼中看出來,我們對于 $foo2 的修改并不影響到 $foo。而當我們使用 的時候,情況就完全不同了。使用 的作用是引用傳遞,也就是說實質上兩個變量名指向的是同一個對象。因此,一個變量的修改會影響到另一個變量。例如:
$a = new stdClass(); $a->name = 'bar'; $b = $a; $b->name = 'baz'; echo $a->name;//baz echo $b->name;//baz
clone 與 對于數組的操作
clone 操作不僅僅可以用于對象的拷貝,對于數組的拷貝同樣也可以使用。我們來看一個例子:
$arr1 = array('A'=>'Apple', 'B'=>'Banana'); $arr2 = $arr1; $arr3 = clone $arr1; $arr1['A'] = 'Ananas'; $arr2['B'] = 'Blueberry'; echo '可以看出,修改 $arr1 和 $arr2 的值會互相影響,而 $arr3 是一個完全獨立的數組。'; print_r($arr1); print_r($arr2); print_r($arr3); echo '';
對于 clone 對象的限制
但是需要注意的是,我們并不是對于所有的對象都可以使用 clone 進行拷貝的。事實上,在 PHP 中,只有當使用 new 關鍵字創建對象時,才能使用 clone 進行對象的拷貝。否則我們會發現在使用 clone 進行拷貝時會出現錯誤提示。例如:
class Foo { public $name = 'bar'; } $foo = new Foo(); $bar = clone $foo; echo $bar->name;//bar class Bar extends Foo { } $bar = new Bar(); $baz = clone $bar; echo $baz->name;//bar
結論
因此,在使用 PHP 進行對象拷貝操作時,請不要忘記這兩個關鍵字的本質區別,選擇正確的操作關鍵字進行使用,以避免在代碼編寫過程中出現錯誤。同時,我們需要注意 clone 操作并不是對于所有的對象都適用,需要我們選擇正確的方式來進行對象拷貝操作。
上一篇ajax 參數是list
下一篇css3 字體銳利