แนะนำตัว
ฟังก์ชันสามารถมี 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