Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ออบเจ็กต์และ Reference ใน PHP

บทนำ

ใน PHP ออบเจ็กต์จะถูกส่งผ่าน Reference (อ้างอิง) โดยค่าเริ่มต้น Reference คืออีลีแอส (Alias) ที่ทำให้ตัวแปรสองตัวสามารถเขียนค่าไปยังค่าเดียวกันได้ ตัวแปรออบเจ็กต์ไม่ได้เก็บออบเจ็กต์เองเป็นค่า แต่เก็บ Object Identifier (ตัวระบุออบเจ็กต์) ที่ชี้ไปยังออบเจ็กต์จริงในหน่วยความจำ เมื่อส่งออบเจ็กต์เป็นอาร์กิวเมนต์ คืนค่า หรือกำหนดค่า ตัวแปรต่างๆ จะไม่ใช่ Alias แต่อย่างไรก็ตาม พวกมันจะเก็บสำเนาของ Identifier เดียวกันที่ชี้ไปยังออบเจ็กต์เดียวกัน

ตัวอย่างการตรวจสอบ Object ID

PHP มีฟังก์ชัน spl_object_hash() ที่คืนค่า Hash ID เฉพาะของออบเจ็กต์ ในโค้ดต่อไปนี้ ตัวแปรออบเจ็กต์สองตัวที่อ้างอิงออบเจ็กต์เดียวกันจะคืนค่า ID เดียวกัน:

<?php
class test1 {
    public $name;
}
$obj1 = new test1();
echo "ID of obj1: " . spl_object_hash($obj1) . "\n";
$obj2 = $obj1;
echo "ID of obj2: " . spl_object_hash($obj2);
?>

ผลลัพธ์

ผลลัพธ์แสดงว่า ID ของทั้งสองตัวแปรเหมือนกัน:

ID of obj1: 000000004355dda6000000006f04b1a7
ID of obj2: 000000004355dda6000000006f04b1a7

เมื่อเราสร้าง Reference ของตัวแปรออบเจ็กต์โดยเติม & หน้าชื่อตัวแปร การเปลี่ยนแปลงพร็อพเพอร์ตีจะสะท้อนไปยังตัวแปร Reference อัตโนมัติ:

ตัวอย่างการใช้ Reference Operator (&)

<?php
class test1 {
    public $name;
}
$obj1 = new test1();
echo "ID of obj1: " . spl_object_hash($obj1) . "\n";
$obj2 = &$obj1;
echo "ID of obj2: " . spl_object_hash($obj2) . "\n";
$obj1->name = "Amar";
echo "name: " . $obj2->name;
?>

ผลลัพธ์

ID of obj1: 00000000163cf0b8000000003ad0ed93
ID of obj2: 00000000163cf0b8000000003ad0ed93
name: Amar