บทนำ
ใน PHP References (อ้างอิง) ช่วยให้เข้าถึงเนื้อหาตัวแปรเดียวกันด้วยชื่อที่ต่างกัน พวกมันไม่เหมือน pointers ใน C/C++ เพราะไม่สามารถดำเนินการคณิตศาสตร์ด้วยได้ ใน C/C++ พวกมันคือที่อยู่หน่วยความจำจริง ใน PHP ในทางตรงข้าม พวกมันเป็น symbol table aliases ใน PHP ชื่อตัวแปรและเนื้อหาตัวแปรเป็นสิ่งต่างกัน ดังนั้น เนื้อหาเดียวกันสามารถมีชื่อต่างกันได้ ตัวแปรอ้างอิงถูกสร้างโดยการนำหน้าเครื่องหมาย & ให้ตัวแปรต้นทาง ดังนั้น $b=&$a จะหมายความว่า $b เป็นตัวแปรอ้างอิงของ $a
การกำหนดค่าแบบอ้างอิง (Assign By Reference)
ในตัวอย่างต่อไปนี้ สองตัวแปรอ้างอิงถึงค่าเดียวกัน:
ตัวอย่าง
<?php $var1=10; $var2=&$var1; echo "$var1 $var2\n"; $var2=20; echo "$var1 $var2\n"; ?>
ผลลัพธ์
10 10 20 20
หากคุณมอบหมาย ส่ง หรือคืนตัวแปรที่ไม่ได้กำหนดโดยอ้างอิง มันจะถูกสร้างขึ้น การมอบหมายอ้างอิงให้ตัวแปรที่ประกาศ global ภายในฟังก์ชัน อ้างอิงจะมองเห็นได้เฉพาะภายในฟังก์ชัน เมื่อมอบหมายค่าให้ตัวแปรที่มีอ้างอิงในคำสั่ง foreach อ้างอิงเหล่านั้นจะถูกแก้ไขด้วย
ตัวอย่าง
<?php $arr=[1,2,3,4,5]; $i=&$ref; foreach($arr as $i) echo $i*$i, "\n"; echo "ref = ". $ref; ?>
ผลลัพธ์
1 4 9 16 25 ref = 5
ในตัวอย่างต่อไปนี้ องค์ประกอบอาร์เรย์เป็นอ้างอิงถึงตัวแปรแต่ละตัวที่ประกาศก่อนเริ่มต้นอาร์เรย์ หากองค์ประกอบถูกแก้ไข ค่าของตัวแปรก็จะเปลี่ยน:
ตัวอย่าง
<?php $a = 10; $b = 20; $c=30; $arr = array(&$a, &$b, &$c); for ($i=0; $i<3; $i++) $arr[$i]++; echo "$a $b $c"; ?>
ผลลัพธ์
11 21 31