Penghantaran Objek melalui Rujukan dalam OOP dalam PHP
Katakan kita diberikan kelas User seperti berikut:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Katakan kita mencipta objek kelas ini:
<?php
$user = new User('john', 30);
?>
Sekarang bayangkan situasi berikut: anda
ingin menetapkan nilai pembolehubah $user
kepada pembolehubah lain, contohnya
$test.
Jika ini bukan mengenai objek, tetapi mengenai primitif,
iaitu rentetan, nombor, tatasusunan dan sebagainya,
maka salinan nilai pembolehubah $user akan masuk
ke dalam pembolehubah $test.
Ini bermakna perubahan mana-mana pembolehubah kelak tidak akan mengubah nilai pembolehubah yang satu lagi. Mari lihat contoh:
<?php
$user = 1;
$test = $user; // dalam pembolehubah $test sekarang ialah 1
$test = 2; // dalam pembolehubah $test sekarang ialah 2, manakala dalam $user masih 1
?>
Dengan objek, ia berbeza - apabila ditulis ke dalam pembolehubah lain, objek tidak disalin, sebaliknya dihantar melalui rujukan: ini bermakna, kedua-dua pembolehubah ini mempunyai nilai objek yang sama. Ini mempunyai implikasi penting: jika anda menukar sebarang sifat objek menggunakan satu pembolehubah, perubahan yang sama akan muncul dalam pembolehubah kedua.
Mari kita lihat secara praktikal. Cipta objek dengan pengguna:
<?php
$user = new User('john', 30);
?>
Tetapkan objek kepada pembolehubah lain:
<?php
$test = $user;
?>
Tukar sifat name
dalam pembolehubah $test
<?php
$test->name = 'eric';
?>
Mari kita semak sama ada objek bersama telah berubah.
Paparkan sifat name
dari pembolehubah $user:
<?php
echo $user->name; // akan memaparkan 'eric'!
?>
Buat kelas Product, di mana
terdapat sifat berikut: name,
price.
Cipta objek kelas Product, tulis
ia ke dalam pembolehubah $product1.
Tetapkan nilai pembolehubah $product1
kepada pembolehubah $product2. Semak
bahawa kedua-dua pembolehubah merujuk kepada satu
objek yang sama.