ป้ายกำกับ: Web Development

PHP: จาก 5 มา 8 ต้องปรับตัวอะไรบ้างPHP: จาก 5 มา 8 ต้องปรับตัวอะไรบ้าง

ข้อดีของ PHP 5 คือ ถ้าเขียนตามคำแนะนำในยุคนั้น ๆ update PHP ขึ้นเป็น 1 version, 2 version ได้ไม่ซับซ้อนนัก แต่พอทิ้งมันไปนานใช้แต่ WordPress แล้วมาเขียนเป็น Native PHP 8 ใหม่ ๆ มันก็มีเรื่องที่ควรจะรู้เพิ่ม เพื่อให้เขียนง่ายขึ้น (เขียนแบบเดิมมันก็ได้นะ แต่มันเสียโอกาส)

การก้าวกระโดดจาก PHP 4 – 5 มาสู่ PHP 8 ถือเป็นการเปลี่ยนผ่านจากยุค “Scripting Language” แบบดั้งเดิม ไปสู่ยุค “Modern Enterprise Language” ที่มีความยืดหยุ่น ปลอดภัย และทำงานได้รวดเร็วขึ้นมหาศาลครับ

โค้ดที่เคยเขียนในยุค PHP 4 / 5 หลายอย่างถูกถอดถอนออกไปแล้ว (Deprecated/Removed) สิ่งที่จำเป็นต้องศึกษาเพิ่มสามารถสรุปแบ่งเป็นกลุ่มหลัก ๆ ได้ดังนี้ครับ


Type System & Strict Types (ระบบ Type ที่เข้มงวด)

ในยุค PHP 4/5 ภาษา PHP เป็นแบบ Loose Type มากๆ แต่ใน PHP 8 มีระบบ Type Safety ที่แข็งแกร่งขึ้นมาก ช่วยลด Bug ได้ตั้งแต่ตอนเขียนโค้ด

  • declare(strict_types=1);: การเปิดโหมดบังคับ Type ป้องกันการแปลง Data Type โดยอัตโนมัติแบบผิด ๆ
  • Scalar Type Hinting: การระบุ Type ให้กับ Argument และ Return Value ของ Function (เช่น int, string, float, bool, void)
  • Union Types (PHP 8.0): กำหนดให้รับได้มากกว่าหนึ่ง Type เช่น int|float
  • Intersection Types (PHP 8.1): กำหนดให้ต้องเป็นไปตาม Interface ทั้งคู่ เช่น Iterator&Countable
  • Mixed Type: การระบุ mixed เมื่อตัวแปรนั้นสามารถเป็นอะไรก็ได้จริง ๆ

Modern OOP Features (ฟีเจอร์ Object-Oriented ยุคใหม่)

การเขียน Class ใน PHP 8 สะดวกและกระชับขึ้นกว่ายุค PHP 5 มาก ลดโค้ด Boilerplate ลงไปได้เยอะ

  • Constructor Property Promotion (PHP 8.0): ยุบการประกาศ Property และการ Assign ค่าใน Constructor ให้เหลือบรรทัดเดียว
    // ยุคก่อนต้องประกาศตัวแปรด้านบน แล้วมา assign ใน {}
    // PHP 8+ เขียนแบบนี้ได้เลย:
    public function __construct(
        public string $name,
        private int $age
    ) {}
    
  • Readonly Properties (PHP 8.1) & Readonly Classes (PHP 8.2): กำหนดให้ Property หรือ Class นั้น ๆ ใส่ค่าได้ครั้งเดียวตอนสร้าง Object หลังจากนั้นจะแก้ไขไม่ได้ (Immutable)
  • Enums (PHP 8.1): มีระบบ Enumerations แท้ ๆ ให้ใช้แล้ว ไม่ต้องใช้ class Constants แบบเดิมอีกต่อไป
  • Attributes (PHP 8.0): มาแทนการเขียน Docblock คอมเมนต์ (/ @Annotation */) เพื่อกำหนด Metadata ทำให้ระบบอย่าง Routing หรือ ORM อ่านค่าได้ง่ายขึ้น

New Operators & Syntax Sugar (ไวยากรณ์ใหม่ ๆ ที่ช่วยให้ชีวิตง่ายขึ้น)

ช่วยให้เขียนโค้ดสั้นลง และอ่านง่ายขึ้นอย่างเห็นได้ชัด

  • Nullsafe Operator (?->): บอกลาการครอบ if (is_null(...)) ซ้อนกันหลายชั้น ถ้าตัวแปรข้างหน้าเป็น null มันจะส่งกลับ null ทันทีโดยไม่เกิด Error เช่น $country = $session?->user?->getAddress()?->country;
  • Match Expression (PHP 8.0): ร่างพัฒนาของ switch-case ที่ทำงานแบบ Strict Comparison (===), ส่งค่ากลับ (Return Value) ได้เลย และไม่ต้องเขียน break;
  • Named Arguments (PHP 8.0): ส่ง Parameter เข้า Function โดยระบุชื่อตัวแปรได้เลย ไม่จำเป็นต้องเรียงตามลำดับ เช่น setcookie(name: 'test', expires: time() + 3600);
  • Null Coalescing Operator (??): (เริ่มมีตั้งแต่ PHP 7 แต่จำเป็นมาก) ใช้เช็คค่า isset() และกำหนด Default Value ในตัว เช่น $username = $_GET['user'] ?? 'anonymous';

Error Handling & Performance (การจัดการ Error และประสิทธิภาพ)

  • Internal Errors as Exceptions: ใน PHP 8 ฟังก์ชันภายในระบบส่วนใหญ่จะ Throw Exception หรือ Error ออกมาแทนที่จะพ่นแค่ Notice หรือ Warning แล้วปล่อยให้สคริปต์รันต่อ ทำให้ต้องปรับแนวคิดมาใช้ try-catch ครอบจุดสำคัญ
  • JIT (Just-In-Time) Compilation: ฟีเจอร์เด่นของ PHP 8 ที่ช่วยคอมไพล์โค้ดเป็น Machine Code โดยตรง ช่วยเพิ่มความเร็วในงานประเภทคํานวณ (CPU-bound tasks)
  • OPcache: ศึกษาการตั้งค่า OPcache เพื่อทำ Preloading โค้ดเข้า Memory (ช่วยให้เว็บเร็วขึ้นมากใน Production)

Ecosystem & Modern Tools (เลิกใช้เครื่องมือยุคเก่า)

ถ้ามาจากยุค PHP 4-5 เครื่องมือรอบตัวเปลี่ยนไปทั้งหมดแล้วครับ

เรื่อง ยุค PHP 4 – 5 (ที่เลิกใช้แล้ว) ยุค PHP 8 (มาตรฐานปัจจุบัน)
Database Access mysql_* functions (ลบออกไปแล้ว) PDO หรือ MySQLi (แนะนำ PDO)
Package Management โหลดไฟล์ .zip มา include เอง / PEAR Composer (ต้องศึกษาตัวนี้เป็นอันดับแรกๆ)
Autoloading __autoload() PSR-4 Autoloading ผ่าน Composer
Coding Standard เขียนตามใจชอบ PSR-12 / PER Coding Style
Frameworks โค้ดดิ้งแบบดิบ ๆ / CodeIgniter 1.x / Joomla Laravel หรือ Symfony (เน้นสถาปัตยกรรมแบบ MVC / Dependency Injection)
Web Server Interface mod_php บน Apache Nginx + PHP-FPM หรือใช้ Server ยุคใหม่อย่าง FrankenPHP (รองรับ HTTP/3)

💡 คำแนะนำสำหรับการเริ่มต้น

  1. ติดตั้ง Composer: สละเวลาศึกษาตัวจัดการ Package ตัวนี้ เพราะเป็นหัวใจของ PHP ยุคใหม่
  2. ปรับพื้นฐาน PDO: ฝึกเขียนต่อฐานข้อมูลแบบ Prepared Statements เพื่อความปลอดภัยจาก SQL Injection
  3. ลองใช้ Framework ยุคใหม่: แนะนำให้ลองจับ Laravel ดูสักโปรเจกต์เล็ก ๆ มันจะบังคับให้เราได้ใช้ฟีเจอร์ใหม่ ๆ ของ PHP 8 ทั้งหมดโดยอัตโนมัติครับ

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