การอ้างอิงใน PHP
ใน PHP เราสามารถกำหนดค่า จากตัวแปรหนึ่งให้กับอีกตัวแปรหนึ่งได้:
<?php
$num1 = 1;
$num2 = $num1; // กำหนดค่า
echo $num1; // 1
echo $num2; // 1
?>
การกำหนดค่าแบบนี้จะเป็นการคัดลอกค่า จากตัวแปรแรกไปยังตัวแปรใหม่ ซึ่งหมายความว่าตัวแปรทั้งสอง ไม่มีความสัมพันธ์กัน และสามารถ เปลี่ยนแปลงค่าได้อย่างอิสระจากกัน ดูตัวอย่างโค้ดต่อไปนี้:
<?php
$num1 = 1;
$num2 = $num1;
$num2 = 2;
echo $num1; // 1 - ไม่มีการเปลี่ยนแปลง
?>
อย่างไรก็ตาม เราสามารถทำให้ ไม่ได้คัดลอกค่าของตัวแปร แต่คัดลอก การอ้างอิง ไปยังค่านั้นได้ ในกรณีนี้ เมื่อค่าของตัวแปรหนึ่งเปลี่ยนแปลง ค่าของอีกตัวแปรหนึ่งก็จะเปลี่ยนแปลงไปด้วย
การที่จะส่งค่าด้วยการอ้างอิง ต้องใส่เครื่องหมายแอมเพอร์แซนด์ (&) นำหน้าชื่อตัวแปร:
<?php
$num1 = 1;
$num2 = &$num1; // ส่งผ่านโดยการอ้างอิง
?>
ตอนนี้การเปลี่ยนแปลงตัวแปรแรก จะทำให้ตัวแปรที่สองเปลี่ยนแปลงไปด้วย:
<?php
$num1 = 1;
$num2 = &$num1;
$num2 = 2;
echo $num1; // 2 - เปลี่ยนแปลงแล้ว
?>
ในทำนองเดียวกัน หากเราเปลี่ยน ค่าของตัวแปรแรก ค่าของตัวแปรที่สอง ก็จะเปลี่ยนแปลงไปด้วย:
<?php
$num1 = 1;
$num2 = &$num1;
$num1 = 2;
echo $num2; // 2
?>
บอกหน่อยว่า ผลลัพธ์ ของโค้ดต่อไปนี้จะเป็นอย่างไร:
<?php
$num1 = 1;
$num2 = $num1;
$num2 = 2;
echo $num1;
echo $num2;
?>
บอกหน่อยว่า ผลลัพธ์ ของโค้ดต่อไปนี้จะเป็นอย่างไร:
<?php
$num1 = 1;
$num2 = &$num1;
$num2++;
echo $num1;
echo $num2;
?>
บอกหน่อยว่า ผลลัพธ์ ของโค้ดต่อไปนี้จะเป็นอย่างไร:
<?php
$num1 = 1;
$num2 = $num1;
$num1++;
$num2++;
echo $num1;
echo $num2;
?>
บอกหน่อยว่า ผลลัพธ์ ของโค้ดต่อไปนี้จะเป็นอย่างไร:
<?php
$num1 = 1;
$num2 = &$num1;
$num1++;
$num2++;
echo $num1;
echo $num2;
?>