4.8 การส่งผ่านค่าให้กับฟังก์ชัน

     เพื่อให้การใช้งานฟังก์ชันมีความยืดหยุ่นมากขึ้น จะต้องสร้างฟังก์ชันในลักษณะของการส่งผ่านค่า การส่งผ่านค่าให้กับฟังก์ชันในปัจจุบันนิยมใช้การส่งค่าแบบการใส่ค่าตัวแปรเป็นอาร์กิวเมนต์ ซึ่งค่าคงที่ของตัวแปรในโปรแกรมหลัก (Main Program) ส่งไปตัวแปรในโปรแกรมย่อย (Subprogram) เพื่อคํานวณหรือประมวลผลอย่างอื่น เมื่อเสร็จแล้วส่งผลกลับมายังโปรแกรมหลักโดยค่าของตัวพารามิเตอร์ที่รับเข้ามาให้กับอาร์กิวเมนต์ จะไม่ทําให้ค่าของตัวแปรอาร์กิวเมนต์ที่อยู่ภายนอกฟังก์ชันนั้นเปลี่ยนแปลงค่าไปในภาษาพีเอชพี (PHP) การส่งค่าตัวแปรให้เป็นพารามีเตอร์ของฟังก์ชัน สามารถทําได้ 3 แบบ ดังนี้

4.8.1 การส่งผ่านค่าด้วยตัวแปร (Pass by value)

     เป็นการส่งค่าแบบทางเดียว เนื่องจากเมื่อฟังก์ชันรับค่าพารามิเตอร์ (Parameter) เข้าจะทําการสร้างตัวแปรขึ้นมาเป็นของตัวเองโดยการคัดลอก (Copy) ค่าจากพารามิเตอร์ (Parameter) ที่ส่งเข้ามา แล้วส่งต่อค่าที่คัดลอกนั้นไปยังตัวแปรภายในฟังก์ชันแล้วทํางาน แม้ว่าตัวแปรในฟังก์ชันมีการเปลี่ยนแปลงก็จะไม่มีผลใดๆ ต่อค่าที่อยู่ภายนอกฟังก์ชัน

ตัวอย่างโปรแกรมที่ 4.17 โปรแกรมการส่งผ่านค่าด้วยตัวแปร

     เขียนคําสั่งโปรแกรมภาษาพีเอชพี ตามตัวอย่าง แล้วบันทึกไฟล์ชื่อ function_pass1.php การส่งผ่านค่าด้วยตัวแปร

     Source Code:

คลิกที่ปุ่ม RUN ด้านซ้ายเพื่อแสดงผลลัพธ์

     ผลลัพธ์ที่ได้


     อธิบายโปรแกรม 

          บรรทัดที่ 1 เปิดแท็กคำสั่งภาษาพีเอชพี

          บรรทัดที่ 2 – 4 ประกาศการใช้ฟังก์ชัน foodprice($price,$promotion) มีตัวแปร 2 ตัวคือ $price และ $promotion และคำสั่งภายในฟังก์ชัน มีการคำนวณค่า $promotion = ($price * $promotion)/100;

          บรรทัดที่ 5 กำหนดตัวแปร price ให้มีค่า 800

          บรรทัดที่ 6 กำหนดตัวแปร promotion ให้มีค่า 20

          บรรทัดที่ 7 เรียกใช้ฟังก์ชัน foodprice($price,$promotion)

          บรรทัดที่ 8 ให้แสดงข้อความ Total Promotion และแสดงค่าตัวแปร promotion

          บรรทัดที่ 9 ปิดแท็กคำสั่งภาษาพีเอชพี


     กรณีผลลัพธ์ในตัวอย่างโปรแกรมที่ 4.17 มีการส่งผ่านค่าด้วยตัวแปรจะเห็นว่าค่าตัวแปร promotion จะไม่มีการเปลี่ยนแปลงไปตามคำสั่งการคำนวณในฟังก์ชัน foodprice($price,$promotion)

4.8.2 การส่งผ่านค่าด้วยการอ้างอิง (Pass by Reference)

     เป็นการส่งค่าแบบทางเดียว เนื่องจากเมื่อฟังก์ชันรับค่าพารามิเตอร์ (Parameter) จะทําการสร้างตัวแปรขึ้นมาเป็นของตัวเองโดยการคัดลอก (Copy) ค่าจากพารามิเตอร์ (Parameter) ที่ส่งเข้ามา แล้วส่งต่อค่าที่คัดลอกนั้นไปยังตัวแปรภายในฟังก์ชันแล้วทํางาน แม้ว่าตัวแปรในฟังก์ชันมีการเปลี่ยนแปลงก็จะไม่มีผลใดๆ ต่อค่าที่อยู่ภายนอกฟังก์ชัน

ตัวอย่างโปรแกรมที่ 4.18 โปรแกรมการส่งผ่านค่าด้วยการอ้างอิง  

     เขียนคําสั่งโปรแกรมภาษาพีเอชพี ตามตัวอย่าง แล้วบันทึกไฟล์ชื่อ function_pass2.php การส่งผ่านค่าด้วยการอ้างอิง

     Source Code:

คลิกที่ปุ่ม RUN ด้านซ้ายเพื่อแสดงผลลัพธ์

   ผลลัพธ์ที่ได้


     อธิบายโปรแกรม 

          บรรทัดที่  1  เปิดแท็กคำสั่งภาษาพีเอชพี

          บรรทัดที่  2 – 4  ประกาศการใช้ฟังก์ชัน foodprice($price,&$promotion) มีตัวแปร 2 ตัวคือ $price และ $promotion ซึ่งตัวแปร $promotion จะมีการส่งผ่านค่าด้วยการอ้างอิง โดยจะมีเครื่องหมาย & อยู่หน้าตัวแปร และคำสั่งภายในฟังก์ชัน มีการคำนวณค่า $promotion = ($price * $promotion)/100;

          บรรทัดที่  5  กำหนดตัวแปร price ให้มีค่า 800

          บรรทัดที่  6  กำหนดตัวแปร promotion ให้มีค่า 20

          บรรทัดที่  7  เรียกใช้ฟังก์ชัน foodprice($price,&$promotion)

          บรรทัดที่  8  ให้แสดงข้อความ Total Promotion และแสดงค่าตัวแปร promotion

          บรรทัดที่  9  ปิดแท็กคำสั่งภาษาพีเอชพี


     กรณีผลลัพธ์ในตัวอย่างโปรแกรมที่ 4.18 มีการส่งผ่านค่าด้วยการอ้างอิง จะเห็นว่าค่าตัวแปร promotion จะมีการเปลี่ยนแปลงไปตามคำสั่งการคำนวณในฟังก์ชัน foodprice($price,&$promotion)

4.8.3 การส่งค่ากลับของฟังก์ชันด้วยคําสั่ง Return

      ในการใช้งานฟังก์ชันนอกจากจะสามารถส่งผ่านค่าใดๆ ไปประมวลผลภายในฟังก์ชัน ได้แล้ว ยังสามารถคืนค่าใด ๆ กลับมายังส่วนที่เรียกใช้งานฟังก์ชันได้ โดยใช้คําสั่ง return ตาม ด้วยค่าที่ต้องการคืนกลับ และค่าที่คืนกลับจะถูกแทนที่ในตําแหน่งที่เรียกใช้ฟังก์ชัน

ตัวอย่างโปรแกรมที่ 4.19 โปรแกรมแสดงการส่งค่ากลับของฟังก์ชันด้วยคําสั่ง Return

     เขียนคําสั่งโปรแกรมภาษาพีเอชพี ตามตัวอย่าง แล้วบันทึกไฟล์ชื่อ Test_Return.php

     Source Code:

คลิกที่ปุ่ม RUN ด้านซ้ายเพื่อแสดงผลลัพธ์

     ผลลัพธ์ที่ได้


     อธิบายโปรแกรม 

          บรรทัดที่  1  เปิดแท็กคำสั่งภาษาพีเอชพี

          บรรทัดที่  2 – 6  ประกาศการใช้ฟังก์ชัน cal_rectangle($width,$long) มีตัวแปร 2 ตัวคือ  $ width และ $ long ซึ่งคำสั่งการทำงานภายในฟังก์ชัน คือ การนำตัวแปร $width คูณกับค่าตัวแปร  $long แล้วเก็บค่าไว้ในตัวแปร $area_rectangle และมีการส่งค่าคืนกลับไปที่ฟังก์ชัน 

         บรรทัดที่  7  ให้แสดงข้อความ "สี่เหลี่ยมผืนผ้ามีความกว้าง = 15 หน่วยและความยาว = 5 หน่วย" และให้ขึ้นบรรทัดใหม่

          บรรทัดที่  8  ให้แสดงข้อความ "สี่เหลี่ยมผืนผ้ารูปนี้จะมีพื้นที่ (กว้าง x ยาว) =" เชื่อมต่อกับค่าจากการเรียกใช้ฟังก์ชัน cal_rectangle($width,$long)

          บรรทัดที่  9  ปิดแท็กคำสั่งภาษาพีเอชพี