บทที่ 7 การสร้างฟังก์ชันของ PHP

   7.1 การประกาศฟังก์ชัน        
             ก่อนที่เราจะใช้ฟังก์ชันใดๆ เราจะสร้างฟังก์ชันขั้นก่อน หลังจากนั้นค่อยเรียกฟังก์ชันนั้นเมื่อต้องการใช้งาน ซึ่งการสร้างฟังก์นี้เราอาจจะเรียกว่าเป็นการประกาศฟังก์ชัน โดยรูปแบบของการประกาศฟังก์ชันในภาษา PHP เป็นดังนี้ 

   








รายละเอียดของการประกาศฟังก์ชั่น เป็นดังนี้










       ยกตัวอย่างการประกาศฟังก์ชันชื่อว่า asterisk โดยเป็นฟังก์ชันที่ใช้พิมพ์เครื่องหมายดอกจันทร์จำนวน 30 ครั้ง รายละเอียดของฟังก์ชันนี้เป็น ดังนี้











7.2 การใช้ฟังก์ชันโดยไม่มีการส่งผ่านค่า
          หลังจากประกาศฟังก์ชันแล้ว ในการใช้ฟังก์ชันก็เพียงเรียกชื่อฟังก์ชันนั้น แต่ให้สังเกตว่าฟังก์ชันที่ จะเรียกใช้งานนั้นมีการส่งผ่านค่าหรือไม่ ในกรณีที่ไม่มีการส่งผ่านค่าก็เพียงเรียกชื่อฟังก์ชันตามด้วยเครื่องหมายวงเล็บเปิด-ปิด ตัวอย่างถัดไปจะเรียกใช้ฟังก์ชัน asterisk ที่ได้ประกาศไว้ในหัวข้อที่ผ่านมา 














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

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


















    

              จากโปรแกรมและผลลัพธ์ข้างต้นนี้ได้ทำการปรับปรุงฟังก์ชัน  asterisk โดยเขียนฟังก์ชันในลักษณะที่มีการส่งผ่านค่าให้กับฟังก์ชันซึ่งมีอาร์กิวเมนต์  $no ทำหน้าที่เป็นตัวรับค่าจำนวนที่ต้องการให้พิมพ์เครื่องหมายดอกจัน ภายในฟังก์ชันก็นำอาร์กิวเมนต์  $mo นี้ไปเข้าเงื่อนไขเพื่อทำซ้ำของคำสั่ง For กำหนดให้ตัวแปร $sign เป็นตัวแปรที่ใช้ต่อสตริงเครื่องหมายดอกจันเท่ากับจำนวนค่าของอาร์กิวเมนต์


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















7.5 ประเภทของตัวแปร และขอบเขตของตัวแปร
         ในการใช้งานฟังก์ชันเราจะเห็นว่ามีการใช้งานตัวแปรภายในฟังก์ชัน และบางครั้งชื่อตัวแปรที่ใช้ภายในฟังก์ชันบังเอิญมีชื่อเดียวกับชื่อตัวแปรที่ใช้อยู่ภายนอกฟังก์ชัน ในกรณีนี้ชื่อตัวแปรนี้เราจะถือว่าเป็นตัวแปรตัวเดียวกันหรือไม่ ในการตอบคำถามนี้เราจะต้องทำความรู้จักประเภทของตัวแปรซึ่งแบ่งออกเป็น 2 ประเภท คือตัวแปรประเภท Local และ Global
   
               ตัวแปร local คือ ตัวแปรที่มีขอบเขตการใช้งานภายในบริเวณใดบริเวณหนึ่งเท่านั้น เช่นมีขอบเขตการใช้งานเฉพาะภายในฟังก์ชันเท่านั้น ถ้ามีตัวแปรที่ใช้งานภายในฟังก์ชัน ปละใช้งานภายนอกเป็นชื่อตัวแปรเดียวกันเราจะถือว่าตัวแปรตัวแปร 2 ตัวนี้ ถือเป็นตัวแปรคนละตัวแปรกัน

















              ตัวแปร Global คือ ตัวแปรที่มีขอบเขตการใช้งานทั่วทั้งโปรแกรม ไม่ว่าจะใช้ตัวแปรประเภทนี้บริเวณใดก็ตามทุกส่วนของโปรแกรมจะรู้จักตัวแปรตัวนี้ ในการประกาศให้ตัวแปรใดเป็นประเภท global เราจะใช้คำสั่ง global วางไว้หน้าชื่อตัวแปรที่ตัวแปรที่ต้องการ 

7.6 ประเภทของการส่งผ่านค่า
         ในการส่งผ่านค่าใดๆ ไปยังฟังก์ชัน หลังจากภายในฟังก์ชันประมวลผลเสร็จ และมีการเปลี่ยนค่าที่ผ่านเข้ามาเกิดขึ้น ถามว่าพอกลับไปยังส่วนที่ใช้ฟังก์ชันแล้วค่าของตัวแปรที่ส่งผ่านค่า ไปยังฟังก์ชันจะถูกเปลี่ยนไปตามด้วยหรือไม่ คำตอบก็ตอบคือขึ้นอยู่ที่ประเภทของการส่งผ่านค่า โดยการส่งผ่านมีค่า 2 ประเภท ดังนี้
·         การส่งผ่านด้วยค่าของตัวแปร (Pass by value) การเปลี่ยนแปลงใดๆ ของค่าอาร์กิวเมนต์จะไม่มีผลต่อค่าของตัวแปรที่ส่งผ่านมาไปยังฟังก์ชัน







       









       การส่งผ่านด้วยการอ้างในหน่วยความจำ (Pass by Reference)
 การเปลี่ยนแปลงใดๆ ชองค่าอาร์กิวเมนต์ จะมีผลต่อค่าของตัวแปรที่ส่งผ่านค่าไปยังฟังก์ชัน โดยจะใช้สัญลักษณ์  & นำหน้าตัวแปรที่จะส่งผ่านไยังฟังก์ชัน