บทนำ
ฟังก์ชันอาจมี return เป็นคำสั่งสุดท้ายในบอดี้ แม้จะไม่บังคับ เมื่อเรียกฟังก์ชัน ควบคุมโปรแกรมกลับไปที่สภาพแวดล้อมที่เรียก หลังดำเนินคำสั่งในบล็อกบอดี้ - ไม่ว่าคำสั่งสุดท้ายในบล็อกฟังก์ชันจะเป็น return หรือไม่ ถ้าไม่มี return statement ควบคุมจะคืนค่า NULL ให้ผู้เรียก หาก return statement ประกอบด้วยนิพจน์ clause ค่าของนิพจน์จะถูกคืนด้วย ฟังก์ชันสามารถคืนค่าได้เพียงค่าเดียว ซึ่งอาจเป็นชนิดสเกลาร์ อาร์เรย์ หรืออ็อบเจ็กต์ ค่าที่คืนอาจมอบหมายให้ตัวแปรบางตัวสำหรับการประมวลผลต่อไป
ฟังก์ชันพร้อม return
ในตัวอย่างต่อไปนี้ ฟังก์ชันคืนผลบวกของจำนวนเต็มสองจำนวนที่ส่งเป็นอาร์กิวเมนต์:
ตัวอย่าง
<?php function add($var1, $var2){ $var3= $var1+$var2 ; return $var3; } $x=10; $y=20; $z=add($x,$y); echo "addition=$z"; ?>
ผลลัพธ์
addition=30
การคืนค่าอาร์เรย์ (Returning array)
ฟังก์ชันคืนค่าได้เพียงค่าเดียว อย่างไรก็ตาม อาร์เรย์ของหลายค่าสามารถคืนได้ ตัวอย่างต่อไปนี้ส่งตัวเลขสองตัวให้ฟังก์ชันที่คืนอาร์เรย์ของผลบวก ลบ คูณ และหาร:
ตัวอย่าง
<?php function result($var1, $var2){ $r1=$var1+$var2; $r2=$var1-$var2; $r3=$var1*$var2; $r4=$var1/$var2; return array("add"=>$r1,"sub"=>$r2,"multiply"=>$r3,"division"=>$r4); } $x=10; $y=20; $arr=result($x,$y); foreach ($arr as $k=>$v){ echo $k . "->" . $v . "\n"; } ?>
ผลลัพธ์
add->30 sub->-10 multiply->200 division->0.5
การคืนค่าแบบอ้างอิง (Return by reference)
เช่นเดียวกับการส่งอาร์กิวเมนต์แบบอ้างอิง ฟังก์ชันก็สามารถคืนค่าแบบอ้างอิงได้ สำหรับวัตถุประสงค์นี้ ชื่อฟังก์ชันต้องนำหน้าด้วยสัญลักษณ์ $ อีกทั้ง ต้องให้สัญลักษณ์ & ในการเรียกฟังก์ชันด้วย
ในตัวอย่างต่อไปนี้ myfunction() มีอาร์เรย์สแตติก หนึ่งในองค์ประกอบถูกคืนแบบอ้างอิงและรับในตัวแปร ค่าของตัวแปรถูกแก้ไขและเรียกฟังก์ชันเดิมอีกครั้ง อาร์เรย์ในฟังก์ชันควรแสดงค่าที่เปลี่ยนไปแล้ว
ตัวอย่าง
<?php function &myfunction(){ static $arr=[1,2,3,4,5]; echo "array elements: "; foreach ($arr as $i){ echo "$i "; } echo "\n"; return $arr[2]; } $var=&myfunction(); echo "returned by reference : $var\n"; $var=100; $var=&myfunction(); ?>
ผลลัพธ์
array elements: 1 2 3 4 5 returned by reference : 3 array elements: 1 2 100 4 5
ค่าของตัวแปร $x และ $y ถูกสลับกันในฟังก์ชัน swap() เนื่องจากตัวแปรถูกส่งแบบอ้างอิง ตัวแปรจึงแสดงค่าที่ปรับเปลี่ยนแล้วนอกฟังก์ชันด้วย
การระบุชนิดค่าที่คืน (return type hints / return Type declarations)
ตั้งแต่ PHP 7 ขึ้นไป สามารถระบุ type hints สำหรับตัวแปร/อ็อบเจ็กต์ที่คืนได้ เหมือนกับการประกาศชนิดสำหรับอาร์กิวเมนต์ สำหรับชนิดการคืนค่า ชนิดสเกลาร์มาตรฐานทั้งหมด คลาส และอาร์เรย์สามารถใช้ได้
รูปแบบไวยากรณ์
//กำหนดฟังก์ชันพร้อม type hints สำหรับค่าที่คืน function myfunction($arg1, $arg2): type{ .. .. return $var; }
ชนิดข้อมูล PHP มาตรฐานทั้งหมด รวมถึงชนิดสเกลาร์ อาร์เรย์ คลาส/อินเตอร์เฟซ iterable และ object เป็นชนิดที่ถูกต้องสำหรับการให้ type hints สำหรับตัวแปรที่คืนในการประกาศฟังก์ชัน
ตัวอย่าง
<?php function add($x, $y): float{ return $x+$y; } $var=add(5,8); var_dump($var); ?>
ผลลัพธ์
float(13)
การใช้คำสั่ง declare พร้อม strict_types=1 จะป้องกันการบังคับแปลงชนิดข้อมูล (coercion)
ตัวอย่าง
<?php declare (strict_types=1); function add($x, $y): int{ return $x+$y; } $var=add(5.5,8.8); var_dump($var); ?>
ผลลัพธ์
PHP Fatal error: Uncaught TypeError: Return value of add() must be of the type integer, float returned