แนะนำตัว
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