4.8 การส่งผ่านค่าให้กับฟังก์ชัน
เพื่อให้การใช้งานฟังก์ชันมีความยืดหยุ่นมากขึ้น จะต้องสร้างฟังก์ชันในลักษณะของการส่งผ่านค่า การส่งผ่านค่าให้กับฟังก์ชันในปัจจุบันนิยมใช้การส่งค่าแบบการใส่ค่าตัวแปรเป็นอาร์กิวเมนต์ ซึ่งค่าคงที่ของตัวแปรในโปรแกรมหลัก (Main Program) ส่งไปตัวแปรในโปรแกรมย่อย (Subprogram) เพื่อคํานวณหรือประมวลผลอย่างอื่น เมื่อเสร็จแล้วส่งผลกลับมายังโปรแกรมหลักโดยค่าของตัวพารามิเตอร์ที่รับเข้ามาให้กับอาร์กิวเมนต์ จะไม่ทําให้ค่าของตัวแปรอาร์กิวเมนต์ที่อยู่ภายนอกฟังก์ชันนั้นเปลี่ยนแปลงค่าไปในภาษาพีเอชพี (PHP) การส่งค่าตัวแปรให้เป็นพารามีเตอร์ของฟังก์ชัน สามารถทําได้ 3 แบบ ดังนี้
4.8.1 การส่งผ่านค่าด้วยตัวแปร (Pass by value)
เป็นการส่งค่าแบบทางเดียว เนื่องจากเมื่อฟังก์ชันรับค่าพารามิเตอร์ (Parameter) เข้าจะทําการสร้างตัวแปรขึ้นมาเป็นของตัวเองโดยการคัดลอก (Copy) ค่าจากพารามิเตอร์ (Parameter) ที่ส่งเข้ามา แล้วส่งต่อค่าที่คัดลอกนั้นไปยังตัวแปรภายในฟังก์ชันแล้วทํางาน แม้ว่าตัวแปรในฟังก์ชันมีการเปลี่ยนแปลงก็จะไม่มีผลใดๆ ต่อค่าที่อยู่ภายนอกฟังก์ชัน
ตัวอย่างโปรแกรมที่ 4.17 โปรแกรมการส่งผ่านค่าด้วยตัวแปร
เขียนคําสั่งโปรแกรมภาษาพีเอชพี ตามตัวอย่าง แล้วบันทึกไฟล์ชื่อ function_pass1.php การส่งผ่านค่าด้วยตัวแปร
Source Code:
ผลลัพธ์ที่ได้
อธิบายโปรแกรม
บรรทัดที่ 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:
ผลลัพธ์ที่ได้
อธิบายโปรแกรม
บรรทัดที่ 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:
ผลลัพธ์ที่ได้
อธิบายโปรแกรม
บรรทัดที่ 1 เปิดแท็กคำสั่งภาษาพีเอชพี
บรรทัดที่ 2 – 6 ประกาศการใช้ฟังก์ชัน cal_rectangle($width,$long) มีตัวแปร 2 ตัวคือ $ width และ $ long ซึ่งคำสั่งการทำงานภายในฟังก์ชัน คือ การนำตัวแปร $width คูณกับค่าตัวแปร $long แล้วเก็บค่าไว้ในตัวแปร $area_rectangle และมีการส่งค่าคืนกลับไปที่ฟังก์ชัน
บรรทัดที่ 7 ให้แสดงข้อความ "สี่เหลี่ยมผืนผ้ามีความกว้าง = 15 หน่วยและความยาว = 5 หน่วย" และให้ขึ้นบรรทัดใหม่
บรรทัดที่ 8 ให้แสดงข้อความ "สี่เหลี่ยมผืนผ้ารูปนี้จะมีพื้นที่ (กว้าง x ยาว) =" เชื่อมต่อกับค่าจากการเรียกใช้ฟังก์ชัน cal_rectangle($width,$long)
บรรทัดที่ 9 ปิดแท็กคำสั่งภาษาพีเอชพี