หากพูดถึงภาษา PHP แล้ว หลายๆ ท่านก็คงจะรู้จักและเคยใช้มาแล้วอย่างแน่นอน (อาจจะเป็นระดับเทพในภาษา PHP แล้วก็ได้ 🤭) เพราะ PHP ถือว่าเป็นภาษา Programming ที่ได้รับความนิยมอย่างมากและพัฒนามาอย่างยาวนาน ถึงแม้ว่าจะมีหลายๆ ความเห็นบอกว่า PHP is dead. แล้วก็เถอะ แต่มันก็ยัง Still Alive in 2022 😅 พร้อมกลับมาอย่างยิ่งใหญ่พร้อม PHP 8 ส่วน PHP 7.4 ก็หมดระยะ Support ไปเป็นที่เรียบร้อยแล้ว (PHP 7.4 หมดระยะซัพพอร์ตแล้ว ตัวสุดท้ายของสาย 7.x) ดังนั้นในบทความนี้เราจะใช้ PHP 8 กัน
ส่วนตัวไม่เคยจับ PHP สักเท่าไหร่ อาจจะไม่เลยด้วยซ้ำ จะมีก็แค่ลง Wordpress แค่นั้น (ก็ไม่ได้เขียน PHP อยู่ดี) เพราะผมเริ่มเขียนโปรแกรมฝั่งเว็บเมื่อไม่นานและผมก็เริ่มต้นกับ JavaScript และพวก Framework ที่เป็นฝั่ง Frontend ซะมากกว่า
ในบทความนี้อาจจะไม่ค่อยลงลึกเรื่องทฤษฎีมาก เพราะเป็นการเรียนรู้และจดบันทึกให้กับตัวผมเอง ผมจึงได้นำมาเรียบเรียงเนื้อหาเป็นบทความ เผื่อใครที่อยากเริ่มต้นเขียน PHP ก็จะได้เริ่มต้นได้ง่ายขึ้น
Prerequisite
Server
ในบทความนี้ผมจะใช้งาน PHP ผ่าน Docker ซึ่งผมมัดรวม Apache PHP ไว้ ด้วยความที่เป็นวิธีที่ผมรู้สึกชอบ และกำลังศึกษา ก็เลยถือโอกาสเอามาลองเขียน PHP มันซะเลย ใครที่อยากลองใช้งานผ่าน Docker สามารถดูวิธีการได้ตามนี้เลย การติดตั้งและใช้งาน PHP Apache และ MySQL ด้วย Docker Compose
แต่ถ้าใครไม่อยากใช้ Docker ก็มีอีกวิธี
- Linux: สามารถติดตั้งผ่าน Package Manager ได้เลย เช่น ตระกูล Debian
apt install php
หรือyum install php
ตระกูล RedHat - macOS: สามารถติดตั้งผ่าน Homebrew ได้เลย
brew install php
- Windows: สามารถติดตั้งผ่าน Chocolatey
choco install php
หรือ wingetwinget install php
หรือถ้าวิธีการข้างบนยังรู้สึกว่ายาก อาจจะลองพวกเครื่องมือที่มัดรวม PHP ไว้ให้แล้ว ก็ได้นะครับ เช่น
Tools
เมื่อได้ Server แล้ว ก็ต้องมี Tools ในการเขียนโปรแกรมด้วย PHP ด้วย ซึ่งก็มีมากมายหลายตัวทั้งแบบฟรี และแบบเสียเงิน ซึ่งในบทความนี้ผมจะใช้ Visual Studio Code และ PHP Intelephense ซึ่งเป็น Extension ของ Visual Studio Code ที่ช่วยให้เขียนโปรแกรมด้วย PHP ได้ง่ายขึ้น
สำหรับอีกตัวที่ใช้ในบทความนี้คือ Terminal เพราะต้องจัดการกับ Docker ซึ่งก็สามารถใช้ Terminal ที่ติดมากับเครื่องของแต่ละ OS ได้เลย
มารู้จัก PHP Tag กันก่อน
ในการเขียนโปรแกรมด้วยภาษา PHP เราจะเปิดด้วย <?php
เพื่อเริ่มต้นคำสั่ง และปิด ?>
เมื่อสิ้นสุดคำสั่ง
มาลองเขียนกัน โดยการสร้างไฟล์ index.php
แล้วเขียน code HTML และ PHP ดังนี้
จากนั้นลองแทรก code PHP เข้าไปใน tag h1
โดยใช้คำสั่งง่ายๆ อย่าง echo
เปิด Browser แล้วเข้าไปที่ http://localhost:8000
เพื่อดูผลลัพธ์สักหน่อย
Variable
ในการสร้างตัวแปรใน PHP จะใช้เครื่องหมาย $
ขึ้นต้นแล้วตามด้วยชื่อตัวแปรที่เราต้องการที่จะตั้ง
Concatenate
Concatenate คือ การเอาค่าของตัวแปรมาต่อกัน ใน PHP โดยจะใช้ .
ในการต่อค่าของตัวแปร
String Interpolation
เราสามารถใช้ String Interpolation เข้ามาช่วยในการต่อค่าของตัวแปรได้ โดยใช้เครื่องหมาย "
แทนการใช้เครื่องหมาย '
ในการประกาศตัวแปร
จะเห็นว่าเราไม่ต้องใช้เครื่องหมาย . ในการต่อค่าของตัวแปรแล้ว
Conditionals and Booleans
Condition หรือ เงื่อนไข คือ สิ่งที่กำหนดเงื่อนไขการทำงานของโปรแกรมของเรา เช่น ถ้าเงื่อนไขนี้เป็นจริง จะให้โปรแกรมทำอะไร แล้วถ้าเงื่อนไขนี้เป็นเท็จ จะให้ทำอะไร
ซึ่ง Condition ก็จะมาคู่กันกับ Boolean ซึ่งก็คือ True
, False
หรือก็คือ จริง หรือ เท็จ นั่นเอง
ซึ่งใน PHP จะเขียน Condition ดังนี้
โดยเงื่อนไขแรกคือ if
เป็นเงื่อนไขที่เราต้องการให้โปรแกรมทำงานเมื่อเงื่อนไขนั้นเป็นจริง และ else
เป็นเงื่อนไขที่เราต้องการให้โปรแกรมทำงานเมื่อเงื่อนไขนั้นเป็นเท็จ
มาลองเขียนกันดูหน่อย เปิดไฟล์ index.php
แล้วเขียน if else ง่ายๆ ดังนี้
ในไฟล์ index.php
จะได้หน้าตาประมาณนี้
ลองมาดูผลลัพธ์ที่ Browser กัน
จะเห็นว่าข้อความ I love PHP 😍
ถูกแสดงออกมา เพราะเงื่อนไขเป็นจริง และถ้าเราลองเปลี่ยนค่า $love_php = false;
ดูบ้าง refresh หน้าเว็บ แล้วมาดูผลลัพธ์กัน
Arrays
Array คือ การเก็บข้อมูลหลายๆ ค่าไว้ในตัวแปรเดียวกัน หรือจะเรียกว่าเก็บข้อมูลเป็น Collection ก็ได้ ซึ่งใน PHP จะเขียน Array ดังนี้
จากนั้นจะทำการ Loop ข้อมูลใน Array ออกมา โดยใช้ foreach
สำหรับการใช้ foreach เราจะ pass ตัวแปรที่เก็บข้อมูลเป็น array เข้าไปใน foreach แล้วใช้ as
เพื่อกำหนดตัวแปรเพื่อมาเก็บค่าของแต่ละรอบ โดยเราจะตั้งชื่อว่าอะไรก็ได้ แต่เพื่อความให้สอดคล้องกับข้อมูลผมจะตั้งชื่อว่า $movie
เราสามารถเขียน foreach แบบ shorthand ได้ดังนี้
กลับมาที่ไฟล์ index.php
แล้วมาลองเขียนโค้ดกัน โดยนำมาแทรกใน tag HTML ตามนี้
เสร็จแล้วก็ refresh หน้าเว็บ แล้วมาดูผลลัพธ์กัน
Associative Arrays
Associative Arrays คือ Array ที่มี Key และ Value โดยเราจะสร้างตัวแปรที่เป็น Array จากนั้นเราจะกำหนดชื่อ Key และใช้ เครื่องหมาย =>
ในการกำหนด Value ของ Key นั้นๆ
จากนั้นเราจะทำการ Loop ข้อมูลออกมา โดยใช้ foreach
โดยการเข้าถึงข้อมูล เราจะเรียกผ่าน key วิธีการก็คืออย่างเช่น อยากเข้าถึง key title ในตัวแปร $top_five_movies
ก็จะเป็น $movie['title']
เปิดไฟล์ index.php แล้วลองเขียนโค้ดตามด้านล่างนี้
เมื่อเราเขียนโค้ดเสร็จแล้ว ก็ refresh หน้าเว็บ แล้วมาดูผลลัพธ์กัน
Functions
Functions (ฟังก์ชัน) คือ ชุดโค๊ดที่เราสามารถเรียกใช้งานได้ซ้ำๆ ลองนึกภาพดูว่า ถ้าเราต้องให้โปรแกรมทำงานแบบเดิมสัก 10 รอบ เราคงไม่มานั่งเขียนโค้ดเดิมซ้ำไปซ้ำมา 10 รอบหรอก จริงไหมครับ ดังนั้นเราจึงสร้าง Function ขึ้นมาเพื่อใช้งานซ้ำๆ ได้
โดยในบทความนี้เราจะมาเขียน function สำหรับ filters หรือกรองข้อมูลในตัวแปร $top_five_movies
กัน
อธิบายโค้ดกันสักนิด ผมได้สร้าง function ชื่อว่า filterByYear
โดยมี parameter 2 ตัวคือ $movies
และ $year
โดย $movies
ใช้รับค่า array ของ movies และ $year
ใช้รับค่าปีที่เราต้องการ filter ออกมา
จากนั้นทำการ Loop ข้อมูลที่ได้จาก function filterByYear โดยใช้ foreach ตามโค้ดข้างล่างนี้เลย
เนื่องจาก function ต้องการ parameter 2 ตัว โดย parameter แรกผมส่งค่า $top_five_movies
ที่เป็น array และ parameter ที่สองผมส่ง 2008
ที่เป็น integer ไปให้ function ทำงาน
เพื่อความชัวร์เรามาดูโค้ดอีกรอบ จะได้หน้าตาออกมาประมาณนี้
เสร็จแล้วมาดูที่หน้าเว็บเรา จะเห็นว่าเราได้ filter ข้อมูลออกมาเรียบร้อยแล้ว
ลองเปลี่ยนปีให้เป็น 1974 ดูหน่อย
Lambda Function
ในภาษา PHP และภาษาอื่นๆ ที่เป็น Functional Programming จะมีการใช้งาน Lambda Function หรือ Anonymous Function ซึ่งเป็นการสร้าง function โดยไม่ต้องมีชื่อ ซึ่งสามารถนำไปใช้งานได้หลายอย่าง เช่น สามารถเก็บไว้ในตัวแปรได้ สามารถส่งเป็น parameter ไปให้ function อื่นๆ ได้ หรือสามารถ return ค่ากลับมาได้
ตัวอย่าง
- Lambda Function โดยรับ parameter 2 ตัว และ return ค่ากลับมา
โดยเป็นผลบวกของ parameter ทั้ง 2 ตัว
ทีนี้เราจะนำเอา Lambda Function มาใช้กับการ filter ข้อมูลใน $top_five_movies
ดูบ้าง
ต่อมาเราจะสร้าง Lambda Function เพื่อเก็บค่า filter แต่ละแบบ โดยผมจะสร้าง 2 แบบ คือ
$filterByYear
สำหรับ filter ด้วยปี$filterByRating
สำหรับ filter ด้วย rating
มาลองเขียน function filterByYear กันก่อน โดยข้อมูลที่นำมา filter จะเป็นข้อมูลจากตัวแปร $top_five_movies
เปลี่ยนตัวแปรใน foreach ให้เป็น $filterByYear
แทน
จะได้โค้ดออกมาหน้าตาประมาณนี้
ผลลัพธ์ใน Browser จะเห็นว่ามีการ filter ข้อมูลด้วยปี 1974 ออกมาเท่านั้น
มาลองใช้ filterByRating กันบ้าง
เปลี่ยนตัวแปรใน foreach ให้เป็น $filterByRating
แทน
จะได้โค้ดออกมาหน้าตาประมาณนี้
ผลลัพธ์ใน Browser จะเห็นว่ามีการ filter ข้อมูลด้วย rating 9.0 ออกมาเท่านั้น
นอกจากนี้เรายังสามารถส่ง function เข้าไปทำงานได้ ทำให้เพิ่มความยืดหยุ่นเข้าไปอีก
เปลี่ยนตัวแปรใน foreach ให้เป็น $filterMovies
แทน
หน้าตาโค้ดจะเป็นประมาณนี้
ลองมาดูผลลัพธ์ใน Browser กันหน่อย
นอกจากเราจะเขียน function ไว้ใช้งานเองได้แล้ว ใน PHP ยังมี Built-in function ไว้ให้เราได้ใช้งานกันแบบง่ายๆ ที่แทบจะไม่ต้องเขียน function เองตามที่เราได้เขียนไปในตอนต้นเลย 🤭
เช่น ถ้าหากเราต้องการที่จะ filter ข้อมูลใน array เหมือนที่เราทำกันมาในตัวอย่างข้างต้น เราสามารถใช้ array_filter
ได้เลย ตามโค้ดด้านล่าง
Separate Logic From the Template
ในชีวิตจริง เราคงไม่เขียน HTML กับ PHP ในไฟล์เดียวกันหรอก จริงไหมครับ เพราะฉะนั้นเราจะแยก HTML กับ PHP ออกจากกัน พูดง่ายๆ ก็คือแยกส่วน Logic กับส่วน Template หรือส่วน View ออกจากกัน โดยจะแยกไฟล์ตามนี้
index.php
สำหรับส่วนของ Logic
index.view.php
สำหรับส่วนของ View หรือ Template
หลังจากจัดการแยก Logic กับ View แล้วจะได้หน้าตาดังนี้