PHP - Penyalinan Objek

Selamat datang di panduan ini tentang penyalinan objek dalam PHP! Dalam artikel ini, kita akan mengeksplorasi konsep penyalinan objek dalam PHP dan memberikan Anda contoh praktis. Pada akhir panduan ini, Anda akan memiliki pemahaman kuat tentang cara menyalin objek dalam PHP dan mengapa hal ini berguna. Jadi, mari kita langsung ke dalamnya!

PHP - Cloning Objects

Apa Itu Penyalinan?

Penyalinan adalah proses di mana objek yang ada disalin ke objek baru. Ini berarti bahwa objek asli dan objek yang disalin akan memiliki properti dan nilai yang sama saat penyalinan. Namun, mereka adalah dua instance objek terpisah, artinya perubahan yang dibuat pada salah satu tidak akan mempengaruhi yang lain.

Dalam PHP, Anda dapat menyalin objek menggunakan kata kunci clone atau dengan mengimplementasikan metode __clone(). Mari kita lihat kedua metode ini.

Contoh 1: Menggunakan Kata Kunci "clone"

Mari kita mulai dengan contoh sederhana menggunakan kata kunci clone. Kita akan membuat kelas Person dengan beberapa properti dan kemudian menyalin instance-nya.

class Person {
public $name;
public $age;

public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}

$person1 = new Person("Alice", 30);
$person2 = clone $person1;

echo "Orang asli: " . $person1->name . ", umur: " . $person1->age . "\n";
echo "Orang disalin: " . $person2->name . ", umur: " . $person2->age . "\n";

Output:

Orang asli: Alice, umur: 30
Orang disalin: Alice, umur: 30

Seperti yang Anda lihat, $person1 dan $person2 memiliki nama dan umur yang sama setelah penyalinan. Sekarang, mari kita buat perubahan pada $person1 dan lihat apakah itu mempengaruhi $person2.

$person1->name = "Bob";

echo "Orang asli: " . $person1->name . ", umur: " . $person1->age . "\n";
echo "Orang disalin: " . $person2->name . ", umur: " . $person2->age . "\n";

Output:

Orang asli: Bob, umur: 30
Orang disalin: Alice, umur: 30

Seperti yang diharapkan, perubahan nama $person1 tidak mempengaruhi $person2, membuktikan bahwa mereka adalah instance terpisah.

Contoh 2: Menggunakan Metode __clone()

Sekarang, mari kita lihat bagaimana menggunakan metode __clone(). Metode __clone() dipanggil saat objek disalin, memungkinkan Anda melakukan tindakan tambahan selama proses penyalinan.

class Person {
public $name;
public $age;

public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}

public function __clone() {
echo "Seorang orang baru telah disalin!\n";
}
}

$person1 = new Person("Alice", 30);
$person2 = clone $person1;

Output:

Seorang orang baru telah disalin!

Seperti yang Anda lihat, saat kita menyalin $person1, metode __clone() dipanggil secara otomatis, mencetak pesan. Anda dapat menambahkan logika khusus yang Anda perlukan di dalam metode __clone().

Contoh 3: Penyalinan Dalam clone()

Apa bila Anda ingin menyalin objek yang berisi objek lain? Anda akan perlu mengimplementasikan penyalinan dalam untuk memastikan bahwa semua objek bersarang juga disalin dengan benar. Ini contohnya:

class Address {
public $street;
public $city;

public function __construct($street, $city) {
$this->street = $street;
$this->city = $city;
}
}

class Person {
public $name;
public $age;
public $address;

public function __construct($name, $age, Address $address) {
$this->name = $name;
$this->age = $age;
$this->address = $address;
}

public function __clone() {
$this->address = clone $this->address;
}
}

$address = new Address("123 Main St", "New York");
$person1 = new Person("Alice", 30, $address);
$person2 = clone $person1;

echo "Orang asli: " . $person1->name . ", umur: " . $person1->age . ", alamat: " . $person1->address->street . "\n";
echo "Orang disalin: " . $person2->name . ", umur: " . $person2->age . ", alamat: " . $person2->address->street . "\n";

Output:

Orang asli: Alice, umur: 30, alamat: 123 Main St
Orang disalin: Alice, umur: 30, alamat: 123 Main St

Seperti yang Anda lihat, meskipun kita menyalin $person1, objek Address di dalamnya juga disalin dengan benar, memastikan bahwa orang disalin memiliki salinan alamatnya sendiri.

Kesimpulan

Dalam panduan ini, kita telah menutup dasar penyalinan objek dalam PHP menggunakan kata kunci clone dan metode __clone(). Kita telah melihat cara menyalin objek sederhana dan bagaimana menangani objek bersarang untuk penyalinan dalam. Ingat bahwa penyalinan adalah fitur kuat dalam PHP yang memungkinkan Anda bekerja dengan beberapa instance objek yang sama tanpa mempengaruhi satu sama lain.

Credits: Image by storyset