การเขียนโปรแกรมกับการสร้างฟังก์ชั่น เป็นอะไรที่แยกกันไม่ออกทีเดียว เมื่อท่านเรียนรู้การเขียนโปรแกรม เขาก็จะสอนให้ท่านรู้จักวิธีสร้างฟังก์ชั่นด้วย

ฟังก์ชั่นนั้นจะมีอยู่ 2 แบบ คือ
1.built in function คือ ฟังก์ชั่นที่มีมาอยู่แล้วในภาษานั้นๆ เช่นถ้า php ก็ explode(),implode(), ฯลฯ
2.user define function คือฟังก์ชั่นที่โปรแกรมเมอร์เขียนขึ้นมาเองภายหลัง

เป้าหมายหลักของฟังก์ชั่นก็คือ เพื่อช่วยให้เราไม่ต้องเขียนโค้ดที่จะ้ต้องใช้ซ้ำๆ ใหม่ทุกครั้งเมื่อจะใช้งาน และเพื่อการ reuse โค้ด

ทีนี้โดยปกติแล้ว เรามักจะสร้างฟังก์ชั่น ที่มีพารามิเตอร์แบบคงตัว เช่น

function subtract( $x = 0 , $y = 0 ){
   return $x - $y;
}

ฟังก์ชั่นนี้จะทำการ เอา x ตั้งแล้วลบด้วย y ตอนที่เรียกใช้ฟังก์ชั่นท่านจะต้องส่งพารามิเตอร์มาให้ถูกตำแหน่ง ไม่งั้นการลบก็จะออกมาผิด

ผมมีข้อเสนอให้เป็นทางเลือกในการสร้างฟังก์ชั่นอีกทางเลือกหนึ่งคือ ส่งพารามิเตอร์ไปเป็นอะเรย์

function subtract( $number = array() ){
   return $number['x'] - $number['y'] ;
}

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

function subtract( $number = array() ){
   return $number['x'] - $number['y'] ;
}
 
echo subtract( array( 'x'=> 10 ,'y'=>5 ) );
echo subtract( array( 'y'=> 5  ,'x'=> 10 ) );

ข้อดีอีกอย่างของการใช้พารามิเตอร์แบบ array ก็คือ ท่านสามารถเพิ่มพารามิเตอร์เข้าไปในอนาคต ได้โดยไม่ต้องไปนั่งไล่แก้โค้ดเก่าที่ท่านเคยเรียกใช้ฟังก์ชั่นตัวนี้ไปแล้ว

function subtract( $number = array() ){
	if( !isset( $number['z'] ) )
	{
		$number['z'] = 0;
	}
 
	return $number['x'] - $number['y'] - $number['z'] ;
}
 
echo subtract( array( 'x'=> 10 ,'y'=>5 ) );
echo subtract( array( 'x'=> 10 ,'y'=>5  , 'z'=> 2 ) );

เห็นมั้ยว่ามันแจ่มแค่ไหน