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

PHP User-Defined functions


แนะนำตัว

PHP มีฟังก์ชันในตัวจำนวนมาก เช่น คณิตศาสตร์ สตริง วันที่ ฟังก์ชันอาร์เรย์ เป็นต้น นอกจากนี้ยังสามารถกำหนดฟังก์ชันตามความต้องการเฉพาะได้อีกด้วย ฟังก์ชันดังกล่าวเรียกว่าฟังก์ชันที่ผู้ใช้กำหนด

ฟังก์ชันคือกลุ่มคำสั่งที่ใช้ซ้ำได้ซึ่งทำงานเฉพาะ บล็อกนี้ถูกกำหนดด้วยคีย์เวิร์ดของฟังก์ชัน และให้ชื่อที่ขึ้นต้นด้วยตัวอักษรหรือขีดล่าง ฟังก์ชันนี้เรียกได้จากทุกที่ภายในโปรแกรมกี่ครั้งก็ได้

ไวยากรณ์

//define a function
function myfunction($arg1, $arg2, ... $argn)
{
   statement1;
   statement2;
   ..
   ..
   return $val;
}
//call function
$ret=myfunction($arg1, $arg2, ... $argn);

ฟังก์ชันอาจกำหนดด้วยตัวเลือกก็ได้ แต่มีอาร์กิวเมนต์จำนวนเท่าใดก็ได้ อย่างไรก็ตาม ต้องระบุจำนวนอาร์กิวเมนต์เท่ากันขณะโทร เนื้อหาของฟังก์ชันสามารถมีโค้ด PHP ใดๆ ที่ถูกต้องได้ เช่น conditionals, loops เป็นต้น (แม้กระทั่งฟังก์ชันหรือคลาสอื่น ๆ อาจถูกกำหนดไว้ภายในฟังก์ชัน) หลังจากดำเนินการคำสั่งในบล็อก การควบคุมโปรแกรมจะกลับไปยังตำแหน่งที่มันถูกเรียกใช้โดยไม่คำนึงถึงการมีอยู่ของคำสั่งสุดท้ายของบล็อกฟังก์ชันเป็นการส่งคืน นิพจน์ที่อยู่หน้าคำสั่ง return ส่งคืนค่าไปยังสภาพแวดล้อมการเรียก

ตัวอย่างฟังก์ชันที่ผู้ใช้กำหนด

ในตัวอย่างต่อไปนี้แสดงคำจำกัดความและการเรียกใช้ฟังก์ชันที่กำหนดโดย usr sayhello()

ตัวอย่าง

<?php
//function definition
function sayHello(){
   echo "Hello World!";
}
//function call
sayHello();
?>

สคริปต์นี้จะให้ผลลัพธ์ต่อไปนี้เมื่อเรียกใช้จากบรรทัดคำสั่ง -

ผลลัพธ์

Hello World!

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

ในตัวอย่างต่อไปนี้ ฟังก์ชั่นถูกกำหนดด้วยอาร์กิวเมนต์ที่เป็นทางการสองอาร์กิวเมนต์

ตัวอย่าง

<?php
function add($arg1, $arg2){
   echo $arg1+$arg2 . "\n";
}
add(10,20);
add("Hello", "World");
?>

ผลลัพธ์

ซึ่งจะให้ผลลัพธ์ตามมา −

30
PHP Warning: A non-numeric value encountered in line 3

ในการโทรครั้งที่สอง ค่าสตริงสองค่าจะได้รับเป็นอาร์กิวเมนต์ของฟังก์ชัน เนื่องจาก PHP ไม่รองรับ + ​​โอเปอเรเตอร์สำหรับสตริง จึงมีการส่งคำเตือน

การคืนค่าฟังก์ชัน

ฟังก์ชันที่ผู้ใช้กำหนดในตัวอย่างต่อไปนี้จะประมวลผลอาร์กิวเมนต์ที่ให้มาและคืนค่าไปยังสภาพแวดล้อมการเรียก

ตัวอย่าง

<?php
function add($arg1, $arg2){
   return $arg1+$arg2;
}
$val=add(10,20);
echo "addition:". $val. "\n";
$val=add("10","20");
echo "addition: $val";
?>

ผลลัพธ์

ซึ่งจะให้ผลลัพธ์ตามมา −

addition:30
addition:30

ในการเรียกครั้งที่สอง แม้ว่าอาร์กิวเมนต์จะเป็นสตริง แต่ PHP จะรวมให้เป็นจำนวนเต็มและทำการบวก

ฟังก์ชันที่มีค่าอาร์กิวเมนต์เริ่มต้น

ขณะกำหนดฟังก์ชัน ค่าดีฟอลต์ของอาร์กิวเมนต์อาจถูกกำหนด หากไม่ได้กำหนดค่าให้กับ agument ดังกล่าวขณะเรียกใช้ฟังก์ชัน ค่าดีฟอลต์นี้จะใช้สำหรับการประมวลผลภายในฟังก์ชัน ในตัวอย่างต่อไปนี้ ฟังก์ชันถูกกำหนดด้วยอาร์กิวเมนต์ที่มีค่าเริ่มต้น

ตัวอย่าง

<?php
function welcome($user="Guest"){
   echo "Hello $user\n";
}
//overrides default
welcome("admin");
//uses default
welcome();
?>

ผลลัพธ์

ซึ่งจะให้ผลลัพธ์ตามมา −

Hello admin
Hello Guest

ในการเรียกครั้งที่สอง ฟังก์ชันจะถูกเรียกใช้โดยไม่ผ่านค่า ในกรณีนี้ อาร์กิวเมนต์ของผู้ใช้จะใช้ค่าเริ่มต้น

ฟังก์ชันที่มีจำนวนตัวแปรของอาร์กิวเมนต์

เป็นไปได้ที่จะกำหนดฟังก์ชันที่มีความสามารถในการรับตัวแปรจำนวนอาร์กิวเมนต์ ชื่อของอาร์กิวเมนต์ที่เป็นทางการในนิยามฟังก์ชันนำหน้าด้วย ... โทเค็น ตัวอย่างต่อไปนี้มีฟังก์ชัน add() ที่เพิ่มรายการตัวเลขที่กำหนดเป็นอาร์กิวเมนต์

ตัวอย่าง

<?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(){
   $numbers=func_get_args();
   $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

ฟังก์ชันภายในฟังก์ชันอื่น

ฟังก์ชันอาจถูกกำหนดไว้ภายใน body block ของฟังก์ชันอื่น อย่างไรก็ตาม ฟังก์ชันภายในไม่สามารถเรียกได้ก่อนที่จะเรียกใช้ฟังก์ชันภายนอก

ตัวอย่าง

<?php
function hello(){
   echo "Hello\n";
   function welcome(){
      echo "Welcome to TutorialsPoint\n";
   }
}
//welcome();
hello();
welcome();
?>

ลบความคิดเห็นเพื่อเรียก wlcome() ก่อนสวัสดี () ข้อความแสดงข้อผิดพลาดต่อไปนี้หยุดโปรแกรม -

Fatal error: Uncaught Error: Call to undefined function welcome()

ผลลัพธ์

แสดงความคิดเห็นในบรรทัดแล้วเรียกใช้อีกครั้ง

Hello
Welcome to TutorialsPoint

ฟังก์ชันแบบเรียกซ้ำ

ฟังก์ชันที่เรียกตัวเองว่าฟังก์ชันแบบเรียกซ้ำ การเรียกตัวเองอย่างไม่มีเงื่อนไขจะสร้างลูปไม่สิ้นสุดและส่งผลให้เกิดข้อผิดพลาดหน่วยความจำไม่เพียงพอเนื่องจากสแต็กเต็ม โปรแกรมต่อไปนี้เรียกฟังก์ชัน factorial() แบบเรียกซ้ำ

ตัวอย่าง

<?php
function factorial($n){
   if ($n < 2) {
      return 1;
   } else {
      return ($n * factorial($n-1));
   }
}
echo "factorial(5) = ". factorial(5);
?>

ผลลัพธ์

factorial(5) = 120