ฟังก์ชัน PHP (PHP Functions)

ฟังก์ชัน (Functions) คือสิ่งที่ทำให้ PHP สามารถทำงานได้อย่างมีประสิทธิภาพ โดยภายใน PHP มีฟังก์ชั่นมากกว่า 1,000 ฟังก์ชั่น ซึ่งเราสามารถสร้างฟังก์ชั่นใหม่ขึ้้นมาใช้เองได้ 

 

ฟังก์ชันที่กำหนดโดยผู้ใช้ หรือผู้เขียนโปรแกรม

  • ฟังก์ชันคือบล็อกคำสั่งที่สามารถใช้งานซ้ำๆในโปรแกรมได้
  • ฟังก์ชันจะไม่ทำงานโดยอัติโนมัติ
  • ฟังก์ชันสามารถดำเนินการโดยเรียกใช้ฟังก์ชัน

ไวยากรณ์การเขียนฟังก์ชัน

function functionName() {
  // ส่วนของการเขียนโค้ด
}

อธิบายเพิ่มเติมเกี่ยวกับฟังก์ชั่น

  • การสร้างฟังก์ชัน ต้องขึ้นต้นด้วย function
  • หลังจากคำว่า function ตามด้วยชื่อของฟังก์ชัน สามารถขึ้นต้นด้วยตัวอักษรหรือ “_” ขีดล่าง และไม่ได้เจาะจงว่าต้องเป็นตัวพิมพ์เล็ก/พิมพ์ใหญ่

ตัวอย่างการเขียนฟังก์ชัน

<?php

function testFunction(){
    echo "ฟังก์ชั่นทดลอง";
}

testFunction();

?>

ไฟล์ที่ 1 ตัวอย่างการเขียนฟังก์ชัน

 

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

ข้อมูลสามารถส่งผ่านไปยังฟังก์ชันผ่านอาร์กิวเมนต์ อาร์กิวเมนต์ก็เหมือนกับตัวแปร

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

ตัวอย่างต่อไปนี้มีฟังก์ชันที่มีอาร์กิวเมนต์เดียว ($name) เมื่อเรียกใช้ฟังก์ชัน testName() จะทำการส่งค่าคืนกลับไปด้วยและชื่อจะถูกใช้ภายในฟังก์ชันซึ่งจะแสดงชื่อที่แตกต่างกันหลายชื่อ 

ตัวอย่างการเขียนฟังก์ชันที่มีการกำหนดอาร์กิวเมนต์

<?php 

function testName($name){
    echo "Name : ".$name."<br>";
}

testName("Pawin");
testName("Warin");
testName("Kawin");

?>

ไฟล์ที่ 2 ฟังก์ชั่นที่มีการกำหนดอาร์กิวเมนต์

ผลลัพธ์ของไฟล์ที่ 2

Name : Pawin
Name : Warin
Name : Kawin

 

ตัวอย่างฟังก์ชั่นที่มีการกำหนดอาร์กิวเมนต์หลายตัว

<?php

function testName($firstname , $lastname){
    echo "Firstname : ".$firstname." Lastname : ".$lastname."<br>";
}

testName("Pawin", "L1");
testName("Nawin", "L2");
testName("Kawin", "L3");
testName("Wawin", "L4");

?>

ไฟล์ที่ 3 การเขียนฟังก์ชั่นที่มีการกำหนดอาร์กิวเมนต์หลายตัว

ผลลัพธ์ของไฟล์ที่ 3

Firstname : Pawin Lastname : L1
Firstname : Nawin Lastname : L2
Firstname : Kawin Lastname : L3
Firstname : Wawin Lastname : L4

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

แต่ใน PHP 7 ขึ้นไปสามารถกำหนดฟังก์ชันที่ตรวจประเภทข้อมูลของพารามิเตอร์กับอาร์กิวเมนต์ว่า ตรงกันรึเปล่าโดยแทรกคำสั่ง strict หากไม่ตรงกันจะส่งผลให้เกิดข้อผิดพลาดร้ายแรง (Error) ขึ้น

ตัวอย่างการระบุประเภทข้อมูลแบบไม่เคร่งครัด (อาจเป็นข้อมูลที่มีประเภทแตกต่างกับที่ระบุไว้ข้างต้น) ดังตัวอย่างต่อไปนี้

<?php
function addNumbers(int $a, int $b) {
  return $a + $b;
}
echo addNumbers(5, "5 days");
// since strict is NOT enabled "5 days" is changed to int(5), and it will return 10
?>

ไฟล์ที่ 4 ระบุประเภทข้อมูลแบบไม่เคร่งครัด

ผลลัพธ์จากไฟล์ที่ 4 มีค่าเท่ากับ 10

10

 

ในการใช้งาน strict ต้องประกาศ declare(strict_types=1); ไว้ที่บรรทัดแรกของไฟล์ PHP ดังตัวอย่างต่อไปนี้

<?php declare(strict_types=1); // strict requirement

function addNumbers(int $a, int $b) {
  return $a + $b;
}
echo addNumbers(5, "5 days");
// since strict is enabled and "5 days" is not an integer, an error will be thrown
?>

ไฟล์ที่ 5 ระบุประเภทข้อมูลแบบเคร่งครัดโดยกำหนด strict 

ผลลัพธ์จากไฟล์ที่ 5 จะแสดง Error เกี่ยวกับประเภทของข้อมูลที่ไม่ตรงกัน

เนื่องจากอาร์กิวเมนต์ของฟังก์ชัน addNumbers() มีการกำหนดประเภทข้อมูลเป็น int ทั้งหมด แต่การส่งผ่านค่าพารามิเตอร์กลับมีข้อมูลประเภทสตริงถูกส่งกลับไปด้วย ดังนั้นจึงเกิด error ขึ้น

 

การส่งผ่านอาร์กิวเมนต์โดยการอ้างอิง 

เมื่ออาร์กิวเมนต์ของฟังก์ชันถูกส่งผ่านโดยการอ้างอิงการเปลี่ยนแปลงอาร์กิวเมนต์จะเปลี่ยนตัวแปรที่ส่งผ่านไปด้วยในการเปลี่ยนอาร์กิวเมนต์ของฟังก์ชันเป็นการอ้างอิงจะใช้ตัวดำเนินการ “&” 

ตัวอย่างการส่งผ่านอารืกิวเมนต์โดยการอ้างอิง

<?php
function add_five(&$value) {
  $value += 5;
}

$num = 2;
add_five($num);
echo $num; //ผลลัพธ์ คือ 7
?>

ไฟล์ที่ 6 ส่งผ่านอาร์กิวเมนต์อ้างอิง

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