PlusMagi's Blog By Pitt Phunsanit

PHP: PER

วงการ PHP ในยุคนี้ไม่ได้มีแค่ PSR (PHP Standard Recommendations) จากกลุ่ม FIG อีกต่อไปแล้วครับ เพราะตอนนี้เรามี PER (PHP Ecosystem Readiness) ซึ่งเป็นมาตรฐานใหม่ที่กำลังเข้ามามีบทบาทสำคัญมากในการเขียนโค้ด PHP ร่วมสมัย

บทความนี้จะพาคุณไปทำความรู้จักว่า PER คืออะไร ทำไมมันถึงเกิดขึ้นมา และมันจะเปลี่ยนวิธีเขียนโค้ดของคุณไปอย่างไรครับ


ทำความรู้จักกับ PER (PHP Ecosystem Readiness)

PER หรือ PHP Ecosystem Readiness คือมาตรฐานการเขียนโค้ด (Coding Style Standards) ชุดใหม่ที่พัฒนาต่อยอดมาจาก PSR โดยกลุ่ม PHP-FIG (PHP Framework Interoperability Group)

ถ้าจะอธิบายให้เห็นภาพที่สุด

PSR-12 คือมาตรฐานที่เราใช้กันมานาน แต่เนื่องจากภาษา PHP มีการอัปเดตฟีเจอร์ใหม่ ๆ อย่างรวดเร็วในเวอร์ชัน 8.x (เช่น Attributes, Constructor Property Promotion, Match Expressions) ทำให้ PSR-12 เริ่มตามไม่ทัน กลุ่ม FIG จึงตัดสินใจสร้าง PER Coding Style ขึ้นมาเพื่อเป็นมาตรฐานที่ “มีชีวิต” (Living Standard) ที่จะอัปเดตตัวเองโดยอัตโนมัติเมื่อมี PHP เวอร์ชันใหม่ออกมา โดยไม่ต้องคอยประกาศเป็น PSR เลขใหม่เรื่อย ๆ


ความเปลี่ยนแปลงจาก PSR-12 สู่ PER

จุดประสงค์หลักของ PER คือการรองรับ Syntax ใหม่ๆ ของ PHP 8.x เป็นต้นไป โดยสิ่งที่คุณจะได้เห็นและต้องปรับตัวตามมาตรฐาน PER มีดังนี้ครับ


Constructor Property Promotion

ฟีเจอร์เด่นของ PHP 8.x ที่ช่วยลดรูปการประกาศ Property ใน Constructor สำหรับ PER จะกำหนดให้จัดฟอร์แมตแบบแยกบรรทัดเพื่อความอ่านง่าย

// มาตรฐาน PER Coding Style
class Point 
{
    public function __construct(
        protected int $x,
        protected int $y,
        protected int $z = 0,
    ) {}
}

Match Expressions

โครงสร้าง match ที่มาแทน switch ในหลายๆ กรณี PER กำหนดให้เขียนโดยมีเว้นวรรคและตัดขึ้นบรรทัดใหม่ให้ชัดเจน รวมถึงใส่ Comma ตัวสุดท้าย (Trailing Comma) ด้วย

$result = match ($operator) {
    '+' => $x + $y,
    '-' => $x - $y,
    default => throw new InvalidArgumentException('Not supported'),
};

Union Types และ Intersection Types

การระบุ Type แบบหลายตัวเลือก (เช่น string|int) PER กำหนดว่าห้ามมีช่องว่างระหว่างเครื่องหมาย | หรือ &

// ถูกต้องตาม PER
public function processData(string|int $input): void 
{
    // ...
}

Attributes

การใช้ Attributes (Metadata) จะต้องประกาศไว้ที่บรรทัดเหนือสิ่งที่เราต้องการจะอ้างอิง และหากมีหลายตัว แนะนำให้แยกบรรทัดกัน

#[AsController]
#[Route('/api/v1/users')]
class UserController
{
    // ...
}

ทำไมเราถึงควรเปลี่ยนมาใช้ PER?


วิธีเริ่มต้นใช้งาน PER ในโปรเจกต์ของคุณ

หากคุณใช้งาน PHP-CS-Fixer (เครื่องมือจัดฟอร์แมตโค้ดอัตโนมัติ) คุณสามารถเริ่มใช้ PER ได้ง่ายๆ โดยการตั้งค่าในไฟล์ .php-cs-fixer.dist.php ดังนี้

<?php

$finder = (new PhpCsFixer\Finder())
    ->in(__DIR__)
    ->exclude('var')
;

return (new PhpCsFixer\Config())
    ->setRules([
        '@PER-CS' => true, // เปิดใช้งานมาตรฐาน PER Coding Style ล่าสุด
        // คุณสามารถใส่กฎอื่นๆ เพิ่มเติมตรงนี้ได้
    ])
    ->setFinder($finder)
;

สรุป

PER (PHP Ecosystem Readiness) ไม่ใช่การล้มล้าง PSR แต่คือการ “อัปเกรด” ให้มาตรฐานการเขียนโค้ด PHP ก้าวทันความทันสมัยของตัวภาษาในปัจจุบัน หากคุณกำลังเริ่มโปรเจกต์ใหม่ หรือกำลังดูแลโปรเจกต์ที่เป็น PHP 8.x แนะนำให้ขยับจาก PSR-12 มาใช้ @PER-CS ได้เลยครับ เพื่อให้โค้ดของทีมคุณอ่านง่าย ทันสมัย และพร้อมรองรับอนาคตอย่างแท้จริง


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

Exit mobile version