แนะนำตัว
ฟังก์ชันสามารถมี return เป็นคำสั่งสุดท้ายในเนื้อความได้ แม้ว่าจะไม่ได้บังคับก็ตาม เมื่อเรียกใช้ฟังก์ชัน การควบคุมโปรแกรมจะกลับมาที่สภาพแวดล้อมการเรียกหลังจากดำเนินการคำสั่งในบล็อกเนื้อหา โดยไม่คำนึงว่าคำสั่งสุดท้ายในบล็อกฟังก์ชันจะคืนค่าหรือไม่ ในกรณีที่ไม่มีคำสั่ง retun การควบคุมจะส่งคืนค่า NULL ไปยังผู้โทร ถ้าคำสั่ง return ประกอบด้วยอนุประโยคของนิพจน์ ค่าของนิพจน์จะถูกส่งกลับ ฟังก์ชันสามารถส่งคืนค่าได้เพียงค่าเดียวซึ่งอาจเป็นประเภทสเกลาร์ อาร์เรย์ หรืออ็อบเจ็กต์ ค่าที่ส่งกลับอาจถูกกำหนดให้กับตัวแปรบางตัวสำหรับการประมวลผลในภายหลัง
ฟังก์ชันส่งคืน
ในตัวอย่างต่อไปนี้ ฟังก์ชันจะคืนค่าผลรวมของจำนวนเต็มสองจำนวนที่ส่งผ่านเป็นอาร์กิวเมนต์
ตัวอย่าง
<?php function add($var1, $var2){ $var3= $var1+$var2 ; return $var3; } $x=10; $y=20; $z=add($x,$y); echo "addition=$z"; ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
addition=30
การคืนค่าอาร์เรย์
ฟังก์ชันสามารถคืนค่าได้เพียงค่าเดียวเท่านั้น อย่างไรก็ตาม สามารถส่งคืนอาร์เรย์ของค่าหลายค่าได้ ตัวอย่างต่อไปนี้จะส่งผ่านตัวเลขสองตัวไปยังฟังก์ชันที่คืนค่าอาร์เรย์ของการบวก การลบ การคูณ และการหาร
ตัวอย่าง
<?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
ส่งคืนโดยอ้างอิง
เช่นเดียวกับที่อาร์กิวเมนต์สามารถส่งผ่านโดยการอ้างอิง ฟังก์ชันสามารถส่งคืนโดยการอ้างอิงได้เช่นกัน เพื่อจุดประสงค์นั้น ชื่อของฟังก์ชันต้องขึ้นต้นด้วยสัญลักษณ์ $ นอกจากนี้ &จะต้องให้สัญลักษณ์ในการเรียกใช้ฟังก์ชันด้วย
ในตัวอย่างต่อไปนี้ 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() เนื่องจากตัวแปรถูกส่งโดยการอ้างอิง ตัวแปรจึงแสดงค่าที่แก้ไขนอกฟังก์ชันด้วย
คำแนะนำประเภทการส่งคืน (การประกาศประเภทการส่งคืน)
ตั้งแต่ PHP 7 เป็นต้นไป คุณสามารถระบุคำแนะนำประเภทสำหรับตัวแปร/อ็อบเจ็กต์ที่ส่งคืนได้ เช่นเดียวกับการประกาศประเภทสำหรับอาร์กิวเมนต์ สำหรับประเภทส่งคืน ยังใช้ประเภทสเกลาร์ คลาสและอาร์เรย์ทั้งหมดได้
ไวยากรณ์
//define a function with type hints for return value function myfunction($arg1, $arg2): type{ .. .. return $var; }
ประเภทข้อมูล PHP มาตรฐานทั้งหมด รวมถึงประเภทสเกลาร์, อาร์เรย์, คลาส/อินเทอร์เฟซ, iterable และอ็อบเจ็กต์ เป็นประเภทที่ถูกต้องสำหรับการให้คำแนะนำประเภทสำหรับตัวแปรส่งคืนในการประกาศฟังก์ชัน
ตัวอย่าง
<?php function add($x, $y): float{ return $x+$y; } $var=add(5,8); var_dump($var); ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
float(13)
การใช้คำสั่งประกาศด้วย strict_types=1 จะป้องกันการบีบบังคับของประเภทข้อมูล
ตัวอย่าง
<?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