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

PHP ผ่านการอ้างอิง


แนะนำตัว

ใน PHP, อาร์กิวเมนต์ของฟังก์ชันสามารถส่งผ่านด้วยค่าหรือส่งผ่านโดยการอ้างอิง โดยค่าเริ่มต้น ค่าของอาร์กิวเมนต์จริงจะถูกส่งต่อโดยค่าไปยังอาร์กิวเมนต์ที่เป็นทางการ ซึ่งจะกลายเป็นตัวแปรภายในฟังก์ชัน ดังนั้น การปรับเปลี่ยนตัวแปรเหล่านี้จะไม่เปลี่ยนค่าของตัวแปรอาร์กิวเมนต์จริง

เมื่ออาร์กิวเมนต์ถูกส่งผ่านโดยการอ้างอิง การเปลี่ยนแปลงในค่าของอาร์กิวเมนต์ที่เป็นทางการจะสะท้อนให้เห็นในตัวแปรอาร์กิวเมนต์จริง เนื่องจากอาร์กิวเมนต์แรกคือการอ้างอิงถึงอาร์กิวเมนต์หลัง ดังนั้นการส่งผ่านโดยกลไกอ้างอิงจะช่วยในการจัดการข้อมูลในทางอ้อมในพื้นที่โลก นอกจากนี้ยังช่วยในการเอาชนะความจริงที่ว่าฟังก์ชันสามารถส่งคืนตัวแปรได้เพียงตัวเดียว

ส่งต่อความคุ้มค่า

ในตัวอย่างต่อไปนี้ ตัวแปรสองตัวถูกส่งไปยังฟังก์ชัน swap() แม้ว่ากลไกการสลับจะเกิดขึ้นภายในฟังก์ชัน แต่จะไม่เปลี่ยนค่าของตัวแปรที่ส่งผ่าน

ตัวอย่าง

<?php
function swap($arg1, $arg2){
   echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n";
   $temp=$arg1;
   $arg1=$arg2;
   $arg2=$temp;
   echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n";
}
$arg1=10;
$arg2=20;
echo "before calling function : arg1=$arg1 arg2=$arg2\n";
swap($arg1, $arg2);
echo "after calling function : arg1=$arg1 arg2=$arg2\n";
?>

ผลลัพธ์

ตัวอย่างนี้ให้ผลลัพธ์ต่อไปนี้

before calling function : arg1=10 arg2=20
inside function before swapping: arg1=10 arg2=20
inside function after swapping: arg1=20 arg2=10
after calling function : arg1=10 arg2=20

ผ่านโดยการอ้างอิง

ในการรับอาร์กิวเมนต์โดยการอ้างอิง ตัวแปรที่ใช้อาร์กิวเมนต์ที่เป็นทางการจะต้องนำหน้าด้วยสัญลักษณ์ &มันทำให้การอ้างอิงถึงตัวแปรที่ใช้สำหรับการเรียกใช้ฟังก์ชัน ดังนั้นผลลัพธ์ของการแลกเปลี่ยนภายในฟังก์ชันก็จะสะท้อนให้เห็นในตัวแปรเดิมที่ผ่าน

ตัวอย่าง

<?php
function swap(&$arg1, &$arg2){
   echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n";
   $temp=$arg1;
   $arg1=$arg2;
   $arg2=$temp;
   echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n";
}
$arg1=10;
$arg2=20;
echo "before calling function : arg1=$arg1 arg2=$arg2\n";
swap($arg1, $arg2);
echo "after calling function : arg1=$arg1 arg2=$arg2\n";
?>

ผลลัพธ์

ผลการสลับจะแสดงดังนี้

before calling function : arg1=10 arg2=20
inside function before swapping: arg1=10 arg2=20
inside function after swapping: arg1=20 arg2=10
after calling function : arg1=20 arg2=10

ในตัวอย่างต่อไปนี้ องค์ประกอบอาร์เรย์คือการอ้างอิงถึงตัวแปรแต่ละตัวที่ประกาศก่อนการเริ่มต้นอาร์เรย์ หากองค์ประกอบถูกแก้ไข ค่าของตัวแปรก็จะเปลี่ยนไปด้วย

ตัวอย่าง

<?php
$a = 10;
$b = 20;
$c=30;
$arr = array(&$a, &$b, &$c);
for ($i=0; $i<3; $i++)
$arr[$i]++;
echo "$a $b $c";
?>

ผลลัพธ์

ค่าของ $a, $b และ $c ก็เพิ่มขึ้นเช่นกัน

11 21 31

นอกจากนี้ยังสามารถส่งผ่านโดยการอ้างอิงอาร์เรย์ไปยังฟังก์ชันได้

ตัวอย่าง

<?php
function arrfunction(&$arr){
   for ($i=0;$i<5;$i++)
      $arr[$i]=$arr[$i]+10;
}
$arr=[1,2,3,4,5];
arrfunction($arr);
foreach ($arr as $i)
echo $i . " ";
?>

ผลลัพธ์

อาร์เรย์ที่แก้ไขจะแสดงดังนี้

11 12 13 14 15

วัตถุและการอ้างอิง

ใน PHP ออบเจ็กต์จะถูกส่งผ่านโดยการอ้างอิงโดยค่าเริ่มต้น เมื่อการอ้างอิงของวัตถุถูกสร้างขึ้น การอ้างอิงจะถูกส่งเป็นอาร์กิวเมนต์ในรูปแบบของ $this ซึ่งอ้างอิงไปยังวัตถุแรกด้วย

ตัวอย่าง

<?php
class test1{
   private $name;
   function getname(){
      return $this->name;
   }
   function setname($name){
      $this->name=$name;
   }
}
$obj1=new test1();
$obj2=&$obj1;
$obj1->setname("Amar");
echo "name: " .$obj2->getname();
?>

ผลลัพธ์

รหัสด้านบนจะแสดงผลลัพธ์ต่อไปนี้

name: Amar