Pada PHP5, object tidak menyimpan nilai dari object itu sendiri, melainkan hanya menyimpan pengenal (identifier) yang dapat mengakses object yang sebenarnya. Pada saat menduplikasi object ke variabel lain ataupun menjadikannya sebagai argumen pada fungsi/method, tetap saja yang di duplikasi adalah identifier dari object tersebut bukan object yang sebenarnya. Sehingga setiap perubahan terhadap variabel yang baru tersebut akan merujuk perubahan ke object yang sebenarnya. Untuk lebih jelasnya bisa melihat contoh berikut:
<?php
class Tes
{
private $_value = 0;
public function add($addition)
{
$this->_value += $addition;
}
public function toValue()
{
return $this->_value;
}
}
?><?php
// buat object Tes
$tes = new Tes;
echo $tes->toValue(), "\n";
// duplikasi variabel $tes ke variabel $tos
$tos = $tes;
$tos->add(1);
// cetak nilai dari $tos
echo $tos->toValue(), "\n";
// cetak nilai dari $tes
echo $tes->toValue(), "\n";
?>Jika dijalankan, potongan kode diatas akan memberikan hasil seperti ini:
0 1 1
Berikut ini sedikit penjelasan dari hasil kode diatas. Angka 0 pada baris pertama adalah nilai property $_value dari variabel $tes. Angka 1 pada baris kedua adalah nilai property $_value dari variabel $tos karena sebelumnya kita telah menambahkan 1 melalui method $tos->add(1). Dan angka 1 pada baris ketiga adalah nilai property $_value dari variabel $tes. Method $tos->add(1) menambahkan 1 pada property $_value pada object Tes, sehingga pada saat kita menjalankan $tos->toValue() tetap akan memberikan hasil yang sama dengan $tes->toValue(). Ini disebabkan variabel $tes dan $tos mempunyai pengenal (identifier) yang sama terhadap object Tes. Untuk lebih jelasnya bisa melihat hasil dari potongan kode berikut:
<?php
var_dump($tes);
var_dump($tos);
?>Hasil:
object(Tes)#1 (1) {
["_value:private"]=>
int(1)
}
object(Tes)#1 (1) {
["_value:private"]=>
int(1)
}Dari hasil potongan kode di atas, dapat dilihat variabel $tes dan $tos mempunyai pengenal yang sama terhadap object Tes, yaitu #1. Sehingga perubahan yang dilakukan melalui variabel $tes maupun variabel $tos merujuk kepada object yang sama (seperti yang sudah dicontohkan pada potongan kode sebelumnya).
Kloning Object
Pada kondisi tertentu kita butuh untuk menduplikasi object, yang mana variabel $tes merujuk ke objeknya sendiri dan variabel $tos merujuk ke objectnya sendiri. Untuk memenuhi kebutuhan tersebut PHP5 menyediakan keyword clone. Keyword clone akan menduplikasi object beserta isinya (property ataupun method) menjadi object yang lain. Untuk lebih jelasnya bisa melihat contoh berikut:
<?php
// buat object Tes
$tes = new Tes;
echo $tes->toValue(), "\n";
// duplikasi variabel $tes ke variabel $tos
$tos = clone $tes;
$tos->add(1);
// cetak nilai dari $tos
echo $tos->toValue(), "\n";
// cetak nilai dari $tes
echo $tes->toValue(), "\n";
?>Jika dijalankan, potongan kode diatas akan memberikan hasil seperti ini:
0 1 0
Hasil diatas berbeda dengan hasil kode program yang tidak menggunakan keyword clone. Angka 0 pada baris ketiga adalah nilai dari properti $_value pada variabel tes. Property tersebut tidak terpengaruh terhadap penambahan yang dilakukan pada method $tos->add(1), karena antara variabel $tes dan $tos sekarang sudah mempunyai object masing - masing. Mudah - mudahan tulisan ini bisa memperjelas pemahaman tentang object dan kloning object di PHP.
Comments
Sedaaap..udah ada kemajuan bang..
Mulai ngebahas OOP..
@Doli Anggia Harahap
Bagi - bagi dung, hasil training OOPnya
Kirim Komentar