Skip to content

PlusMagi's Blog By Pitt Phunsanit

Plus emotional magic to the knowledge of logic.

  • About’s Pitt
Close Button
PlusMagi's Blog By Pitt Phunsanit PHP PHP: PER

PHP: PER

2022-04-082022-04-08| phunsanitphunsanit| 0 Comment | 07:00
Categories:
  • PHP

วงการ 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?

  • ไม่เอ้าท์ (Future-Proof): เนื่องจากเป็น Living Standard เมื่อ PHP 8.4, 8.5 หรือ 9.0 ออกมา มาตรฐาน PER ก็จะอัปเดตเกณฑ์ตามทันที โดยที่เราไม่ต้องรอเปลี่ยนไปใช้ PSR-13 หรือ PSR-14
  • รองรับเครื่องมืออัตโนมัติ: เครื่องมือตรวจโค้ด (Linters/Formatters) ยอดนิยมอย่าง PHP_CodeSniffer หรือ PHP-CS-Fixer ได้เริ่มเปลี่ยนมาใช้ PER เป็นค่าเริ่มต้น (Default) หรือมี Rule ให้เลือกใช้แล้ว
  • โค้ดสะอาดและเป็นหนึ่งเดียว: ช่วยให้ทีมพัฒนาที่ใช้ PHP 8.x ขึ้นไป มีแนวทางการตัดบรรทัด การเว้นวรรคที่เป็นระบบเดียวกัน ลดปัญหา Conflict เวลาตรวจโค้ด (Code Review)

วิธีเริ่มต้นใช้งาน 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 ได้เลยครับ เพื่อให้โค้ดของทีมคุณอ่านง่าย ทันสมัย และพร้อมรองรับอนาคตอย่างแท้จริง


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

  • PHP: Coding Standards Fixer (PHP CS Fixer )
  • จัด code php ตาม PHR 2
  • จัด code php ตาม PHR 2 สำหรับคนไม่ใช้ PHP7
Tags: @PER-CS, Attributes, Code Review, Coding Style Standards, Conflict, Constructor, Ecosystem, FIG, Formatters, Intersection Types, Linters, Match Expressions, Metadata, PER, PHP Ecosystem Readiness, PHP Framework Interoperability Group, PHP Standard Recommendations, PHP_CodeSniffer, PHP-CS-Fixer, PHP-FIG, Promotion, Property, PSR, PSR-12, PSR-13, PSR-14, Readiness, Rule, Switch, Trailing Comma, Union Types, ตรวจโค้ด, ฟอร์แมต, ฟีเจอร์, มาตรฐาน, ลดปัญหา, เครื่องหมาย

แนะแนวเรื่อง

PREVIOUS Previous post: 🚀 OPcache: ตัวช่วยเร่งสปีดให้ PHP
NEXT Next post: PHP: mod_php: อดีตตัวแรง ผู้อุ้มชูโลก PHP

Projects

  • Statement Columns Mapping Helper
  • PlusMagi Site Search
  • PlusMagi Tags Reindex
  • jQuery Plus Repeater

Recent Posts

  • เจาะลึกการประกัน Apple ในประเทศไทย: เรื่องควรรู้ก่อนเข้าศูนย์บริการ
  • คลองทวีวัฒนา: จากสายน้ำแห่งประวัติศาสตร์ สู่ปอดสีเขียวและวิถีชีวิตกรุงเทพฯ ฝั่งธนบุรี
  • Lifetime Warranty ในวงการไอที เมื่อ “ประกันตลอดชีพ” ไม่ได้แปลว่าตลอดไป
  • สงครามนกกระจอกเทศ (The Great Emu War): เมื่อกองทัพออสเตรเลียพ่ายแพ้ให้กับฝูงนก
  • html5: กับบรรณารักษ์และการอธิบายข้อมูล (Data & Metadata)

Archives

Categories

  • .net core (16)
  • AI (50)
  • business (33)
  • Businesses (32)
  • cd (59)
  • ci (62)
  • culture (2)
  • data (5)
  • Design (159)
    • UX/UI (23)
  • devops (200)
  • devsecops (35)
  • dotnet (58)
  • envoy (2)
  • Histories (22)
  • history (2)
  • ios (4)
  • Life (1,205)
    • Books (58)
    • Cartoon (13)
    • Mindset (41)
    • Movies (35)
    • Philosophy (4)
    • Psychology (3)
    • Sci-Fi (52)
    • Tips and Tricks (66)
    • ปรัชญา (266)
    • พัฒนาตนเอง (883)
    • พุทธ (70)
    • สิ่งแวดล้อม (46)
  • mobile (1)
  • mystery (7)
  • net core (10)
  • Network (352)
    • Apache HTTP Server (19)
    • IOT (24)
    • Nginx (40)
    • Stalwart (6)
  • networking (131)
  • Operating Systems (444)
    • Unix-like (309)
      • Android (24)
        • F-Droid (5)
      • Homebrew (22)
      • iPhone (12)
      • Linux (192)
      • macOS (133)
        • OrbStack (11)
      • Oh My ZSH (4)
      • Shell Script (79)
      • SSH (14)
    • Windows (162)
      • PowerShell (28)
      • WSL (25)
  • Programming (1,708)
    • .NET (68)
      • .NET Core EF (7)
      • C# (60)
    • API (145)
      • REST (54)
      • Swagger (13)
    • Database (411)
      • DBeaver (5)
      • MariaDB (38)
      • MySql (81)
      • Oracle Database (8)
        • 10g (3)
      • PostgreSQL (30)
      • RDBMS (78)
      • SQL Server (91)
        • SSMS (10)
        • T-SQL (30)
      • SQLite (2)
    • PowerBuilder (20)
    • Python (27)
    • Rust (44)
    • System Analyst (SA) (96)
    • Testing (110)
      • Automated Testing (45)
        • Playwright (11)
    • UML (52)
    • Web (901)
      • Backend (588)
        • Golang (2)
        • Java (113)
          • Spring Boot (27)
        • Node.js (12)
        • PHP (280)
          • Laravel (60)
          • Yii (5)
      • Frontend (290)
        • CSS (28)
          • Tailwind CSS (6)
        • JavaScript (230)
          • Angular (4)
          • jQuery (70)
          • Tabulator (28)
          • Vue.js (7)
      • WordPress (27)
  • Programs (112)
    • Excel (20)
  • r (2)
  • science (9)
  • script (3)
  • SecDevOps (199)
    • CI/CD (10)
    • Docker (91)
    • GIT (61)
    • SVN (18)
  • Security (370)
  • sistema (1)
  • social (2)
  • system (376)
  • system analyst (31)
  • technology (918)
  • technologyระบบ (100)
  • technologyและระบบ (3)
  • typescript (10)
  • ui (63)
  • Uncategorized (6)
  • ux (58)
  • กฎหมาย (305)
  • การจัดการ (606)
  • การจัดการข้อมูล (349)
  • การจัดการข้อมูลและองค์ความรู้ (3)
  • การพัฒนาตนเอง (12)
  • การออกแบบ (77)
  • ข้อมูล (2)
  • คณิตศาสตร์ (31)
  • ความคิด (110)
  • ความปลอดภัย (224)
  • จริยธรรม (85)
  • จิตวิทยา (884)
  • ชีวิต (115)
  • ทั่วไป (16)
  • ธุรกิจ (622)
  • บุคคล (35)
  • บุคลากร (10)
  • บุคลิก (88)
  • ประวัติศาสตร์ (39)
  • ปัญญาประดิษฐ์ (28)
  • พฤติกรรม (168)
  • ภาษาศาสตร์คอมพิวเตอร์ (28)
  • ระบบ (355)
  • วัฒนธรรม (51)
  • วิชาการ (87)
  • วิชาการข้อมูล (64)
  • วิทยาการข้อมูล (160)
  • วิทยาการข้อมูลและภาษาศาสตร์คอมพิวเตอร์ (1)
  • วิทยาศาสตร์ (163)
  • วิทยาศาสตร์ข้อมูล (28)
  • สังคม (338)
  • สุขภาพ (210)
  • หนังสือ (2)
  • องค์ความรู้ (186)
  • ออกแบบ (18)
  • เทคโนโลยี (290)
  • เทคโนโลยีระบบ (155)
  • 기술 (1)
  • 사회 (1)
  • 시스템 (1)
  • 철학 (1)

Sirat WordPress Theme By VWThemes

Scroll Up
Go to mobile version