Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

การคืนค่า (Returning Values) ใน PHP

บทนำ

ฟังก์ชันอาจมี 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