แนะนำตัว
ฟังก์ชั่นใน PHP สามารถกำหนดเพื่อรับอินพุตจากสภาพแวดล้อม / สคริปต์การเรียกในรูปแบบของอาร์กิวเมนต์ อาร์กิวเมนต์เหล่านี้กำหนดเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคภายในวงเล็บหน้าชื่อฟังก์ชัน โปรดทราบว่าในขณะที่เรียกใช้ฟังก์ชัน จะต้องส่งอาร์กิวเมนต์จำนวนเท่ากันไปให้ฟังก์ชันนั้น
PHP รองรับการเรียกใช้ฟังก์ชันโดยส่งค่า การอ้างอิง อาร์กิวเมนต์ที่มีค่าเริ่มต้น และโดยการส่งผ่านจำนวนตัวแปรของอาร์กิวเมนต์
ฟังก์ชันพร้อมอาร์กิวเมนต์
ในตัวอย่างต่อไปนี้ ฟังก์ชันถูกกำหนดด้วยอาร์กิวเมนต์ที่เป็นทางการสองอาร์กิวเมนต์ เมื่อฟังก์ชันนี้ถูกเรียกโดยส่งผ่านอาร์กิวเมนต์ตามค่า อาร์กิวเมนต์ของฟังก์ชันกลายเป็นตัวแปรโลคัล ดังนั้น การเปลี่ยนแปลงใดๆ ของค่าอาร์กิวเมนต์ภายในฟังก์ชันจะไม่มีผลกับภายนอก
ในที่นี้ ค่าของ $x จะเปลี่ยนแปลงภายในฟังก์ชัน แต่ถ้าเราตรวจสอบค่าหลังจากเรียกใช้ฟังก์ชันแล้ว ฟังก์ชันจะไม่เปลี่ยนแปลง
ตัวอย่าง
<?php function add($x, $y){ $x= $x+$y ; echo $x . "\n"; } $x=10; $y=20; add($x,$y); //outside function $x has previous value. echo $x; ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
30 10
ส่งอาร์เรย์ไปยังฟังก์ชัน
ในตัวอย่างต่อไปนี้ ฟังก์ชัน add() ถูกกำหนดให้รับอาร์เรย์เป็นอาร์กิวเมนต์ ภายในฟังก์ชัน องค์ประกอบอาร์เรย์จะถูกสำรวจโดยใช้ลูป foreach
ตัวอย่าง
<?php function add($arr){ $sum=0; foreach ($arr as $i){ $sum+=$i; } echo "sum = " .$sum; } add(array(1,2,3)); ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
sum = 6
ส่งผ่านอาร์กิวเมนต์โดยการอ้างอิง
ค่าจะถูกส่งผ่านไปยังอาร์กิวเมนต์ของฟังก์ชันตามค่า ดังนั้นการเปลี่ยนแปลงค่าของอาร์กิวเมนต์ภายในฟังก์ชันจะไม่สะท้อนให้เห็นภายนอก เมื่ออาร์กิวเมนต์ถูกส่งผ่านโดยการอ้างอิง การเปลี่ยนแปลงจะถูกส่งไปยังค่าของอาร์กิวเมนต์ภายนอก
ในการรับค่าโดยการอ้างอิง ชื่อของอาร์กิวเมนต์ต้องนำหน้าด้วยสัญลักษณ์ $
ตัวอย่าง
<?php function swap(&$x, &$y){ $t=$x; $x=$y; $y=$t; echo "inside function x=$x y=$y\n"; } $x=5; $y=7; echo "before calling function x=$x y=$y\n"; swap($x, $y); echo "after calling function x=$x y=$y\n"; ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
before calling function x=5 y=7 inside function x=7 y=5 after calling function x=7 y=5
ค่าของตัวแปร $x และ $y จะถูกสับเปลี่ยนในฟังก์ชัน swap() เนื่องจากตัวแปรถูกส่งโดยการอ้างอิง ตัวแปรจึงแสดงค่าที่แก้ไขนอกฟังก์ชันด้วย
คำแนะนำประเภท (การประกาศประเภท)
อันที่จริงแล้ว PHP เป็นภาษาที่พิมพ์แบบไดนามิก ดังนั้นจึงไม่จำเป็นต้องประกาศตัวแปรตามประเภท (เช่นใน C/C++ หรือ Java) อย่างไรก็ตาม การประกาศประเภทอาร์กิวเมนต์ในฟังก์ชันช่วยให้ parser ตรวจพบประเภทข้อมูลที่ไม่ถูกต้องที่ส่งผ่านไปยังฟังก์ชันได้
ไวยากรณ์
//define a function with type hints function myfunction(type $arg1, type $arg2){ .. .. }
ประเภทข้อมูล PHP มาตรฐานทั้งหมด รวมถึงประเภทสเกลาร์ อาร์เรย์ คลาส/อินเทอร์เฟซ iterable และอ็อบเจ็กต์ เป็นประเภทที่ถูกต้องสำหรับการให้คำแนะนำประเภทในการประกาศฟังก์ชัน
ตัวอย่าง
<?php function add(...$numbers){ $ttl=0; foreach ($numbers as $num){ $ttl=$ttl+$num; } return $ttl; } $total=add(10,15,20); echo "total= $total\n"; echo "total=". add(1,2,3,4,5). "\n"; ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
total= 45 total=15
นอกจากนี้ยังสามารถรับรายการอาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชันด้วยความช่วยเหลือของ func_get_args() การทำงาน. เราสามารถเรียกใช้ PHP loop เพื่อสำรวจแต่ละค่าในรายการอาร์กิวเมนต์ที่ส่งผ่าน ในกรณีนั้น นิยามฟังก์ชันไม่มีอาร์กิวเมนต์ที่เป็นทางการ
ตัวอย่าง
<?php function add (int $x, int $y){ $z=$x+$y; echo "addition=$z\n"; } add(10,20); add(5.55, 6.66); ?>
ผลลัพธ์
ซึ่งจะให้ผลลัพธ์ตามมา −
addition=30 addition=11
โปรดทราบว่าในการเรียกใช้ฟังก์ชัน add() ครั้งที่สอง โฟลตจะได้รับเป็นอาร์กิวเมนต์ แต่ยังไม่มีการแสดงข้อผิดพลาด/คำเตือน นี่เป็นเพราะว่า PHP เป็นการบีบบังคับภายในให้เป็นจำนวนเต็มสำหรับการบวก เพื่อป้องกันการแปลงประเภทอัตโนมัติดังกล่าว ให้ใช้ ประกาศ สร้างด้วย strict_types=1
ตัวอย่าง
<?php declare(strict_types=1); function add (int $x, int $y){ $z=$x+$y; echo "addition=$z\n"; } add(10,20); add(5.55, 6.66); ?>
การเรียกใช้ฟังก์ชัน add() ครั้งที่สองจะทำให้เกิดข้อยกเว้น -
ผลลัพธ์
addition=30 PHP Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type integer, float given