วิวัฒนาการภาษา PHP

สรุป Timeline วิวัฒนาการภาษา PHP ตั้งแต่ version 1 จนถึงปัจจุบัน

PHP 1 (1995)

ชื่อเดิม: Personal Home Page Tools

  • ผู้สร้าง: Rasmus Lerdorf
  • จุดประสงค์:
    • ใช้ทำเว็บส่วนตัว
    • track ผู้เข้าชม (counter)
    • อ่านฟอร์ม
  • ยังไม่ถือเป็นภาษาโปรแกรมเต็มรูปแบบ
  • เป็นชุดของ CGI script ที่เขียนด้วย C
  • ไม่มี class
  • ไม่มี function ให้ผู้ใช้เขียนเอง
  • Logic ถูกฝังอยู่ใน HTML โดยตรง

ลักษณะการใช้งาน:

  • ใช้ tag พิเศษแทรกใน HTML
  • ทำงานแบบ interpret ทุกครั้งที่เรียกหน้าเว็บ

ภาพรวม:

PHP 1 คือ “เครื่องมือ” ไม่ใช่ภาษา


PHP 2 (1997)

ชื่อ: PHP/FI (Personal Home Page / Forms Interpreter)

  • เริ่มมี syntax ใกล้เคียง PHP ที่คุ้นเคย
  • เพิ่ม:
    • Variables
    • Control structures (if, while)
    • Basic function
  • รองรับ database แรกๆ (mSQL, MySQL รุ่นบุกเบิก)
  • ยังเป็น procedural ล้วน
  • ยังไม่มี OOP
  • โค้ดเริ่มแยก logic ออกจาก HTML ได้บ้าง

ภาพรวม:

PHP 2 เริ่มเป็น “ภาษา scripting” สำหรับเว็บ


PHP 3 (1998)

เปลี่ยนชื่อเป็น: PHP: Hypertext Preprocessor (recursive acronym)

  • เขียนใหม่เกือบทั้งหมดโดย
    • Andi Gutmans
    • Zeev Suraski
  • วางสถาปัตยกรรมที่เป็นฐานของ PHP ยาวนาน
  • รองรับ extension system
  • Syntax ใกล้ PHP ปัจจุบันมาก
  • รองรับ database หลากหลาย
  • เริ่มมี object model แบบพื้นฐาน (ยังไม่ใช่ OOP เต็ม)
  • ประสิทธิภาพและเสถียรภาพดีขึ้นมาก

ภาพรวม:

PHP 3 คือ “PHP ตัวจริงตัวแรก”

ถ้าไม่มี PHP 3 → ไม่มี PHP 4 / Zend EnginePHP 4 (ประมาณปี 2000)

  • ใช้ Zend Engine 1
  • เป็นภาษา procedural เกือบทั้งหมด
  • OOP มีแบบพื้นฐานมาก (class, method) แต่ยังไม่จริงจัง
  • ไม่มี visibility (public / private)
  • Performance ดีกว่า PHP 3 มาก ทำให้ PHP เริ่มนิยม
  • เหมาะกับเว็บแบบสคริปต์ง่ายๆ

ภาพรวม:

PHP ยังเป็น “template engine + script” มากกว่าภาษาโปรแกรมจริงจัง


PHP 4 (ประมาณปี 2000)

  • ใช้ Zend Engine 1
  • เป็นภาษา procedural เกือบทั้งหมด
  • OOP มีแบบพื้นฐานมาก (class, method) แต่ยังไม่จริงจัง
  • ไม่มี visibility (public / private)
  • Performance ดีกว่า PHP 3 มาก ทำให้ PHP เริ่มนิยม
  • เหมาะกับเว็บแบบสคริปต์ง่ายๆ

ภาพรวม:

PHP ยังเป็น “template engine + script” มากกว่าภาษาโปรแกรมจริงจัง

PHP 5.0 – 5.2 (2004–2006)

  • Zend Engine 2
  • OOP เปลี่ยนครั้งใหญ่
    • constructor / destructor
    • visibility (public / protected / private)
    • abstract class, interface
    • exception
  • เริ่มเขียนโค้ดเชิงวัตถุได้จริง
  • เริ่มมี SPL (Standard PHP Library)

ภาพรวม:

PHP เริ่มเป็น programming language จริงๆ ไม่ใช่แค่ script


PHP 5.3 (2009) – จุดเปลี่ยนใหญ่

  • Namespaces (สำคัญมาก)
  • Closures / Anonymous function
  • Late Static Binding
  • Garbage Collection
  • PDO ใช้งานแพร่หลายขึ้น
  • รองรับ modern framework ได้จริง

ภาพรวม:

เปิดทางให้ Laravel, Symfony, Zend Framework เกิดและเติบโต


PHP 5.4 – 5.6 (2012–2014)

  • Short array syntax []
  • Traits (แก้ปัญหา multiple inheritance)
  • Built-in web server
  • Generator (yield)
  • Password hashing API
  • Performance และ memory ดีขึ้น

ภาพรวม:

PHP ใช้ง่ายขึ้น เขียนสะอาดขึ้น เหมาะกับโปรเจกต์ใหญ่


PHP 7.0 (2015) – เปลี่ยนโลก

  • Zend Engine 3
  • Performance เร็วขึ้น ~2–3 เท่า
  • Memory ใช้น้อยลงมาก
  • Scalar type hint (int, string, bool)
  • Return type declaration
  • Null coalescing operator ??
  • Error handling ดีขึ้น (Error → Throwable)

ภาพรวม:

PHP จาก “ช้า” กลายเป็น “เร็วมาก”

หลายระบบ migrate มา PHP 7 เพราะเหตุผลนี้


PHP 7.1 – 7.4 (2016–2019)

  • Nullable types ?Type
  • Void return type
  • Iterable
  • Arrow function fn() =>
  • Typed properties
  • Preload (7.4)
  • Deprecate ของเก่าเยอะมาก

ภาพรวม:

PHP เริ่ม “strict” มากขึ้น บังคับเขียนโค้ดดีขึ้น


PHP 8.0 (2020) – เปลี่ยนแนวคิดอีกครั้ง

  • JIT (Just-In-Time Compiler)
  • Named arguments
  • Union types (int|string)
  • Attributes (แทน annotation)
  • Match expression
  • Nullsafe operator ?->
  • Error หลายอย่างกลายเป็น TypeError

ภาพรวม:

PHP ขยับเข้าใกล้ภาษาอย่าง Java / C# มากขึ้น


PHP 8.1 (2021)

  • Enums
  • Readonly properties
  • Fibers (รองรับ async framework)
  • Intersection types
  • Performance ดีขึ้นอีก

ภาพรวม:

PHP พร้อมสำหรับ domain-driven / async / modern architecture


PHP 8.2 (2022)

  • Readonly classes
  • Disallow dynamic properties (บังคับโค้ดสะอาด)
  • Type system เข้มขึ้น
  • Deprecate legacy behavior เยอะ

ภาพรวม:

บังคับให้เลิกเขียน PHP แบบ “ตามใจฉัน”


PHP 8.3 (2023)

  • Performance optimization ต่อเนื่อง
  • JSON / Date / String APIs ดีขึ้น
  • Typed class constants
  • Minor syntax & quality improvements

ภาพรวม:

เน้น polish ภาษา ไม่ใช่เปลี่ยนใหญ่


PHP 8.4 (2024/2025)

  • Property hooks
  • New language refinements
  • Type system ยืดหยุ่นขึ้นแต่ยัง strict
  • เตรียมอนาคต PHP 9 (ตัดของ legacy ออก)

ภาพรวม:

วางรากฐาน long-term มากกว่าฟีเจอร์หวือหวา


สรุปภาพใหญ่ (Evolution)

  • PHP 1: เครื่องมือทำเว็บส่วนตัว
  • PHP 2: scripting language สำหรับเว็บ
  • PHP 3: ภาษาโปรแกรมสำหรับเว็บจริงจัง
  • PHP 4 → Script สำหรับเว็บ
  • PHP 5 → OOP language
  • PHP 5.3 → Framework era
  • PHP 7 → Performance revolution
  • PHP 8 → Modern strongly-typed language

PHP 6 หายไปไหน

ทำไมถึงไม่มี PHP 6

หลัง PHP 5 เริ่มจริงจังกับ OOP แล้ว ปัญหาใหญ่ของ PHP ในยุคนั้นคือ

  • Unicode / UTF-8
  • PHP ใช้ string แบบ byte-based
  • การจัดการภาษา non-English (จีน ไทย ญี่ปุ่น) ลำบาก
  • Framework และ CMS เริ่มเจอปัญหานี้หนัก

ทีม PHP เลยตั้งเป้า:

PHP 6 = PHP ที่ “native Unicode”


PHP 6 ตั้งใจจะเปลี่ยนอะไร

แนวคิดหลักของ PHP 6 คือ

  • เปลี่ยน string ภายในให้เป็น Unicode
  • ทำให้ strlen(), substr() เข้าใจตัวอักษรจริง ไม่ใช่ byte
  • แยก binary string กับ text string
  • ทำให้ internationalization เป็น first-class citizen

ฟังดูดี… แต่ปัญหาใหญ่ตามมา


ทำไม PHP 6 ถึงล้ม

  1. Performance แย่มาก
  • Unicode string ใช้ memory สูง
  • เว็บ PHP สมัยนั้นต้องเร็วและถูก
  • overhead สูงเกินรับไหว
  1. Backward compatibility พัง
  • โค้ด PHP เก่าพังจำนวนมาก
  • function พฤติกรรมเปลี่ยน
  • extension เดิมใช้ไม่ได้
  1. Extension ecosystem ล่ม
  • extension ต้อง rewrite ใหม่
  • คนเขียน extension ไม่ตาม
  1. ทีมพัฒนาแตกแนวคิด
  • บางคนอยาก Unicode
  • บางคนอยาก performance
  • สุดท้าย consensus ไม่เกิด

แล้วโค้ด PHP 6 หายไปไหน

ไม่หายทั้งหมด

บางส่วนถูก “แยกไปใช้” ใน PHP 5.x และ 7:

  • Unicode handling → ไปอยู่ใน
    • mbstring
    • intl (ICU)
  • Lexer / Parser บางส่วน → ปรับปรุงต่อ
  • แนวคิด strict มากขึ้น → ส่งต่อไป PHP 7, 8

แต่ ตัว PHP 6 แบบเต็มๆ ไม่เคย release


ทำไมข้ามจาก PHP 5 → PHP 7

เพราะ:

  • ไม่อยากให้คนเข้าใจผิดว่า PHP 6 เคยใช้งานจริง
  • PHP 6 ถูกพูดถึงในหนังสือ บทความ เยอะมาก
  • มีหนังสือ “PHP 6” ที่อิง code prototype
  • ทีม PHP เลย “เผาเลข 6 ทิ้ง”

ผลลัพธ์สุดท้าย

แทนที่จะทำ Unicode ใน core:

  • PHP เลือก:
    • string = byte
    • text encoding = responsibility ของ developer
  • ใช้ library (mbstring, intl) แทน
  • แลก Unicode เต็มรูปแบบ กับ performance + compatibility

สรุปสั้นมาก

  • PHP 6 = โปรเจกต์ที่ล้ม
  • ไม่เคยออก production
  • ล้มเพราะ Unicode + performance + backward compatibility
  • เลข 6 ถูกข้ามไปเลย
  • แนวคิดหลายอย่างไปเกิดใหม่ใน PHP 7 และ 8