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