แนะนำตัว
ฟังก์ชั่นใน 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