PlusMagi's Blog By Pitt Phunsanit

PHP: PSR มาตรฐานที่นักพัฒนา PHP ทุกคนต้องรู้

ถ้าคุณเคยเข้าไปดู 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 (มาตรฐานพื้นฐาน)

เป็นกฎเหล็กขั้นพื้นฐานที่สุดเพื่อให้โค้ดอ่านง่ายและไม่พัง


PSR-4: Autoloader (การโหลดไฟล์อัตโนมัติ)

ปฏิวัติวงการ PHP ด้วยการเลิกใช้ require() หรือ include() ซ้ำ ๆ หลายสิบบรรทัด มาตรฐานนี้ระบุความสัมพันธ์ระหว่าง Namespace กับโครงสร้างโฟลเดอร์ (File Path)


PSR-7 & PSR-15: HTTP Messages & Handlers

มาตรฐานนี้สำคัญมากสำหรับสาย พัฒนา Web Application และ API


PSR-12: Extended Coding Style Guide (สไตล์การจัดฟอร์แมตโค้ด)

หมายเหตุ: มาตรฐานนี้มาแทนที่ PSR-2 ที่เก่าและล้าสมัยไปแล้ว) เป็นเรื่องของความสวยงามและการจัดระเบียบหน้าตาโค้ด (Coding Style)

<?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) เช่น

  1. PHP CS Fixer (PHP Coding Standards Fixer): สั่งรันทีเดียว มันจะแก้โค้ดของเราให้ถูกตามหลัก PSR-12 ทันที
  2. PHP_CodeSniffer (phpcs): ช่วยตรวจจับว่ามีบรรทัดไหนที่เขียนผิดมาตรฐาน
  3. IDE / Text Editors: ปัจจุบันทั้ง PHPStorm และ VS Code (ผ่าน Extension) สามารถตั้งค่าให้จัดฟอร์แมตโค้ดตามมาตรฐาน PSR-12 ได้โดยอัตโนมัติทุกครั้งที่กดบันทึกไฟล์ (Save)

สรุปส่งท้าย: การเขียน PHP ให้ทำงานได้นั้นเป็นเรื่องหนึ่ง แต่การเขียน PHP ให้ สะอาด ได้มาตรฐาน และเติบโตได้อย่างยั่งยืน คือเครื่องหมายของนักพัฒนามืออาชีพ การเริ่มต้นฝึกใช้ PSR ตั้งแต่วันนี้ จะช่วยยกระดับฝีมือการเขียนโค้ดของคุณขึ้นไปอีกขั้นแน่นอนครับ!


อ่านเพิ่มเติม

Exit mobile version