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

อาร์กิวเมนต์ฟังก์ชัน PHP


แนะนำตัว

ฟังก์ชั่นใน 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