Jika anda akan ingin menyalin object pada PHP, maka anda akan menyalin dengan referensi dengan kata lain anda menyalin sebuah object tidak berdasarkan nilai. Berarti jika anda mengubah data pada object utama maka secara otomatis data pada object yang disalin akan ikut terpengaruh, begitu juga sebaliknya.
Jadi, jika kita ingin membuat salinan dari object utama yang datanya sama persis tetapi ketika kita mengubah data object utama atau mengubah data object salinannya, mereka tidak terpengaruh satu sama lain maka solusinya anda bisa menggunaan Magic method yang bernama __clone(). Pada tutorial kali ini kita akan membahas tengtang Object Cloning.
Copy Object atau Copy Referensi
Ciri khas copy pada PHP ia bekerja dengan metode Referensi, yang berarti object utama atau object salinan akan saling terhubung. Contoh :
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class test | |
{ | |
public $a; | |
private $b; | |
function __construct($a, $b) | |
{ | |
$this->a = $a; | |
$this->b = $b; | |
} | |
} | |
$a = new test("ankur" , "techflirt"); | |
$b = $a; //Copy of the object | |
$a->a = "no Ankur"; | |
print_r($a); | |
print_r($b); | |
?> | |
// Result of print_r | |
test Object | |
( | |
[a] => no Ankur | |
[b:test:private] => techflirt | |
) | |
test Object | |
( | |
[a] => no Ankur | |
[b:test:private] => techflirt | |
) |
Penerapan Object Cloning pada PHP
Jika di atas kita telah melihat contoh dari copy object biasa, sekarang kita akan melihat perbedaannya dengan Object Cloning, berikut contohnya:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class test | |
{ | |
public $a; | |
private $b; | |
function __construct($a, $b) | |
{ | |
$this->a = $a; | |
$this->b = $b; | |
} | |
} | |
$a = new test("ankur" , "techflirt"); | |
$b = $a; //Copy of the object | |
$c = clone $a; //clone of the object | |
$a->a = "no Ankur"; | |
print_r($a); | |
print_r($b); | |
print_r($c); | |
?> | |
//Result | |
test Object | |
( | |
[a] => no Ankur | |
[b:test:private] => techflirt | |
) | |
test Object | |
( | |
[a] => no Ankur | |
[b:test:private] => techflirt | |
) | |
test Object | |
( | |
[a] => ankur | |
[b:test:private] => techflirt | |
) |
Dari contoh di atas bisa kita lihat bahwasannya variable $c merupakan hasil dari salinan dari variable $a. Dimana variable $c datannya berbeda dengan variable $a maupun $b.
Object Cloning menggunakan Magic Method __clone
Magic method clone dieksekusi ketika object cloning dilakukan. Begitu PHP mengeksekusi pernyataan $c = clone $a, maka method __clone dipanggil. Untuk penerapannya berikut ini contohnya.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class test | |
{ | |
public $a; | |
private $b; | |
function __construct($a, $b) | |
{ | |
$this->a = $a; | |
$this->b = $b; | |
} | |
//This cloning method | |
function __clone() | |
{ | |
$this->a = "c"; | |
} | |
} | |
$a = new test("ankur" , "techflirt"); | |
$b = $a; //Copy of the object | |
$c = clone $a; //clone of the object | |
$a->a = "no Ankur"; | |
print_r($a); | |
print_r($b); | |
print_r($c); | |
?> | |
// Result | |
test Object | |
( | |
[a] => no Ankur | |
[b:test:private] => techflirt | |
) | |
test Object | |
( | |
[a] => no Ankur | |
[b:test:private] => techflirt | |
) | |
test Object | |
( | |
[a] => c | |
[b:test:private] => techflirt | |
) |
cloning object di php memiliki berbagai fitur dan fleksibilitas untuk mengkloning sutu Object. Sekian tutorial tentang Object Cloning kali ini, semoga bermanfaat.