Pass by Reference Objek dalam OOP di PHP
Misalkan kita diberikan kelas User berikut:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Misalkan kita membuat objek dari kelas ini:
<?php
$user = new User('john', 30);
?>
Sekarang bayangkan situasi berikut: Anda
ingin menetapkan nilai variabel $user
ke variabel lain, misalnya
$test.
Jika yang dibicarakan bukan objek, melainkan primitif,
yaitu string, angka, array, dll,
maka salinan nilai variabel $user akan masuk ke dalam variabel $test.
Ini berarti bahwa perubahan pada salah satu variabel selanjutnya tidak akan mengubah nilai variabel lainnya. Mari kita lihat contohnya:
<?php
$user = 1;
$test = $user; // variabel $test sekarang berisi 1
$test = 2; // variabel $test sekarang berisi 2, sedangkan $user masih 1
?>
Halnya berbeda dengan objek - saat ditulis ke dalam variabel lain, objek tidak disalin, melainkan diteruskan secara referensi (by reference): ini berarti kedua variabel tersebut memiliki nilai yang sama, yaitu satu objek yang sama. Ini memiliki konsekuensi penting: jika Anda mengubah properti tertentu dari objek menggunakan satu variabel, perubahan yang sama akan muncul di variabel kedua.
Mari kita lihat dalam praktik. Buatlah objek user:
<?php
$user = new User('john', 30);
?>
Tetapkan objek ke variabel lain:
<?php
$test = $user;
?>
Ubah properti name
pada variabel $test
<?php
$test->name = 'eric';
?>
Mari kita periksa bahwa objek yang sama telah berubah.
Tampilkan properti name
dari variabel $user:
<?php
echo $user->name; // akan menampilkan 'eric'!
?>
Buatlah kelas Product, yang di dalamnya
terdapat properti berikut: name,
price.
Buat objek dari kelas Product, tulis
ke dalam variabel $product1.
Tetapkan nilai variabel $product1
ke variabel $product2. Periksa
bahwa kedua variabel merujuk pada satu
objek yang sama.