ถ้าคุณเคยเข้าไปดู Code ของ Open-source library ดัง ๆ ใน PHP อย่าง Laravel, Symfony, YII หรือ CodeIgniter คุณอาจจะสังเกตเห็นว่า โครงสร้างโค้ด วิธีการตั้งชื่อ และการเว้นวรรคของพวกเขามีความคล้ายคลึงกันมาก นั่นไม่ใช่เรื่องบังเอิญครับ แต่เป็นเพราะพวกเขากำลังทำตามมาตรฐานที่เรียกว่า PSR (PHP Standard Recommendations) ถือเป็นหัวใจสำคัญที่เปลี่ยนให้โลกของ PHP มีความเป็นมืออาชีพ เป็นระบบ และทำงานร่วมกันได้ง่ายขึ้นมาก จากสมัยก่อนที่ต่างคนต่างเขียนตามใจตัวเอง
PSR คืออะไร?
มันคือ “ข้อกำหนดหรือข้อแนะนำมาตรฐาน” ในการเขียนโค้ด PHP ซึ่งถูกกำหนดขึ้นโดยกลุ่ม PHP-FIG (PHP Framework Interop Group) กลุ่มนี้เป็นการรวมตัวกันของตัวแทนจาก Framework และโปรเจกต์ใหญ่ ๆ ในโลก PHP เป้าหมายของพวกเขาไม่ได้ต้องการจะบอกว่า Framework ไหนดีที่สุด แต่ต้องการสร้าง “ภาษากลาง” เพื่อให้ Developer ทุกคนสามารถเขียนโค้ดที่คุยกันรู้เรื่อง และสามารถนำ Library จากต่างค่ายมาใช้งานร่วมกันได้โดยไม่ติดขัด
PSR ยอดนิยมที่ต้องเจอในชีวิตประจำวัน
แม้ว่า PSR จะมีมากกว่า 20 ข้อ (บางข้อก็ยกเลิกหรืออัปเดตไปแล้ว) แต่มีอยู่ 4 ข้อหลักๆ ที่ถือเป็นไฟต์บังคับที่นักพัฒนา PHP ยุคนี้ต้องรู้และปฏิบัติตามครับ
PSR-1: Basic Coding Standard (มาตรฐานพื้นฐาน)
เป็นกฎเหล็กขั้นพื้นฐานที่สุดเพื่อให้โค้ดอ่านง่ายและไม่พัง
- แท็ก PHP: ต้องใช้
<?phpหรือ<?=เท่านั้น (ห้ามใช้ short tag แบบ<?) - การเข้ารหัสไฟล์: ต้องเป็น UTF-8 แบบไม่มี BOM
- Side Effects: ในหนึ่งไฟล์ ควรเลือกทำอย่างใดอย่างหนึ่งระหว่าง “ประกาศโครงสร้าง” (เช่น ประกาศ class, function, constant) หรือ “สั่งให้โค้ดทำงาน” (Side effects เช่น พิมพ์ค่า, รวมไฟล์) ไม่ควรทำทั้งสองอย่างพร้อมกันในไฟล์เดียว
- การตั้งชื่อ: * Class ต้องเป็น
StudlyCaps(หรือ PascalCase)- Method ต้องเป็น
camelCase
- Method ต้องเป็น
PSR-4: Autoloader (การโหลดไฟล์อัตโนมัติ)
ปฏิวัติวงการ PHP ด้วยการเลิกใช้ require() หรือ include() ซ้ำ ๆ หลายสิบบรรทัด มาตรฐานนี้ระบุความสัมพันธ์ระหว่าง Namespace กับโครงสร้างโฟลเดอร์ (File Path)
- ทำให้เราสามารถใช้
Composerในการทำ Autoloading ได้อย่างทรงพลัง - เช่น ถ้าเราตั้ง Namespace ว่า
App\Models\Userตัว PSR-4 จะบอกให้ PHP วิ่งไปหาไฟล์ที่ชื่อUser.phpในโฟลเดอร์src/Models/User.phpทันทีโดยที่เราไม่ต้องสั่งโหลดไฟล์เอง
PSR-7 & PSR-15: HTTP Messages & Handlers
มาตรฐานนี้สำคัญมากสำหรับสาย พัฒนา Web Application และ API
- PSR-7: กำหนดหน้าตาของ HTTP Request และ HTTP Response ให้เป็นวัตถุ (Objects) ที่มีโครงสร้างเหมือนกัน ทำให้อ่านค่า Header, Body, Method ได้ง่ายขึ้น
- PSR-15: กำหนดมาตรฐานสำหรับ Middleware ช่วยให้เราสามารถสร้างตัวกรอง (เช่น ตรวจสอบสิทธิ์, ตรวจสอบข้อมูล) ที่สามารถยกไปใช้ข้าม Framework ได้
PSR-12: Extended Coding Style Guide (สไตล์การจัดฟอร์แมตโค้ด)
หมายเหตุ: มาตรฐานนี้มาแทนที่ PSR-2 ที่เก่าและล้าสมัยไปแล้ว) เป็นเรื่องของความสวยงามและการจัดระเบียบหน้าตาโค้ด (Coding Style)
- ต้องใช้ 4 Spaces ในการย่อหน้า (Indent) ห้ามใช้ Tab
- คำสั่งโครงสร้างควบคุม (เช่น
if,elseif,switch,for) ต้องมีเว้นวรรค 1 ช่องหลังคำสั่ง และปีกกาเปิด{ต้องอยู่บรรทัดเดียวกับคำสั่งนั้น - สำหรับ Class และ Method ปีกกาเปิด
{ต้องอยู่ บรรทัดใหม่ เสมอ - ตัวอักษรพิมพ์เล็กสำหรับ Keyword ของ PHP (เช่น
true,false,null)
<?php
namespace App\Services; // PSR-12: มีบรรทัดว่างหลัง namespace
class OrderService // PSR-1: PascalCase
{ // PSR-12: ปีกกาเปิดของ Class อยู่บรรทัดใหม่
public function calculateTotal(int $price, int $qty): int // PSR-1: camelCase
{ // PSR-12: ปีกกาเปิดของ Method อยู่บรรทัดใหม่
if ($qty <= 0) { // PSR-12: มีเว้นวรรคหลัง if และปีกกาเปิดอยู่บรรทัดเดียวกัน
return 0; // PSR-12: ใช้ 4 spaces ในการย่อหน้า
}
return $price * $qty;
}
}
สรุปประโยชน์ของ PSR (ทำไมเราต้องแคร์?)
| ประโยชน์ | คำอธิบาย |
| อ่านง่าย สบายตา (Readability) | เมื่อทุกคนจัดฟอร์แมตเหมือนกัน คุณจะสามารถอ่านโค้ดของคนอื่น หรือ Library ระดับโลกได้เข้าใจในเวลาอันรวดเร็ว |
| ทำงานร่วมกันได้ดี (Interoperability) | คุณสามารถดึง Package จาก Packagist มาเสียบใช้งานในโปรเจกต์ของคุณได้ทันที เพราะระบบ Autoload (PSR-4) และ Interfaces มันคุยภาษาเดียวกัน |
| ลดความขัดแย้งในทีม (No Bikeshedding) | ไม่ต้องมานั่งเถียงกันใน Code Review ว่าจะใช้ Tab หรือ Space หรือจะเอาปีกกาไว้บรรทัดไหน เพราะเรายึดตามมาตรฐานสากล |
เครื่องมือช่วยทุ่นแรง (ไม่ต้องจำเองทั้งหมด)
ในความเป็นจริง เราไม่จำเป็นต้องมานั่งเช็คโค้ดทีละบรรทัดด้วยตาตัวเองครับ เพราะมีเครื่องมือช่วยจัดฟอร์แมตให้เราอัตโนมัติ (Automated Tools) เช่น
- PHP CS Fixer (PHP Coding Standards Fixer): สั่งรันทีเดียว มันจะแก้โค้ดของเราให้ถูกตามหลัก PSR-12 ทันที
- PHP_CodeSniffer (phpcs): ช่วยตรวจจับว่ามีบรรทัดไหนที่เขียนผิดมาตรฐาน
- IDE / Text Editors: ปัจจุบันทั้ง PHPStorm และ VS Code (ผ่าน Extension) สามารถตั้งค่าให้จัดฟอร์แมตโค้ดตามมาตรฐาน PSR-12 ได้โดยอัตโนมัติทุกครั้งที่กดบันทึกไฟล์ (Save)
สรุปส่งท้าย: การเขียน PHP ให้ทำงานได้นั้นเป็นเรื่องหนึ่ง แต่การเขียน PHP ให้ สะอาด ได้มาตรฐาน และเติบโตได้อย่างยั่งยืน คือเครื่องหมายของนักพัฒนามืออาชีพ การเริ่มต้นฝึกใช้ PSR ตั้งแต่วันนี้ จะช่วยยกระดับฝีมือการเขียนโค้ดของคุณขึ้นไปอีกขั้นแน่นอนครับ!
อ่านเพิ่มเติม