บทนำ
Magic Methods ใน PHP คือเมธอดพิเศษที่ถูกออกแบบมาเพื่อทำหน้าที่เฉพาะเจาะจง ชื่อเมธอดเหล่านี้จะขึ้นต้นด้วย Double Underscore (__) ชื่อฟังก์ชันทั้งหมดนี้เป็นคำสงวน (Reserved) ไม่สามารถนำไปใช้เพื่อวัตถุประสงค์อื่นได้ Magic Method ในคลาสต้องประกาศเป็น public เมธอดเหล่านี้ทำหน้าที่เป็น Interceptor ที่ถูกเรียกใช้โดยอัตโนมัติเมื่อเงื่อนไขบางอย่างถูกปฏิบัติตาม
รายการ Magic Methods ใน PHP
__sleep และ __wakeup (Serialization)
public __sleep ( void ) : array public __wakeup ( void ) : void
- __sleep() - เรียกก่อน serialize() ควรคืนค่า Array ของชื่อตัวแปรที่ต้องการ serialize
- __wakeup() - เรียกเมื่อ unserialize() ใช้สำหรับสร้างทรัพยากรที่ออบเจ็กต์อาจมีอยู่
__serialize และ __unserialize (Custom Serialization - PHP 7.4+)
public __serialize ( void ) : array public __unserialize ( array $data ) : void
- __serialize() - คืนค่า Associative Array ที่แสดงรูปแบบ Serialized ของออบเจ็กต์
- __unserialize() - รับ Array ที่คืนมาจาก __serialize() เพื่อกู้คืนพร็อพเพอร์ตี
__toString
public __toString ( void ) : string
กำหนดการแสดงผลสตริงของออบเจ็กต์ เช่นเมื่อทำ echo $obj; ต้องคืนค่าสตริง
__invoke
__invoke ([ $... ] ) : mixed
เรียกเมื่อพยายามเรียกใช้ออบเจ็กต์เหมือนฟังก์ชัน
__set_state
static __set_state ( array $properties ) : object
Static method ที่เรียกเมื่อคลาสถูก Export ด้วย var_export() รับ Parameter เป็น Array ของพร็อพเพอร์ตี
__debugInfo
__debugInfo ( void ) : array
เรียกโดยอัตโนมัติเมื่อใช้ var_dump() กับออบเจ็กต์ เพื่อกำหนดพร็อพเพอร์ตีที่ควรแสดง ถ้าไม่กำหนด จะแสดงทุกพร็อพเพอร์ตี (public, protected, private)
Property Overloading Methods
public __set ( string $name , mixed $value ) : void public __get ( string $name ) : mixed public __isset ( string $name ) : bool public __unset ( string $name ) : void
- __set() - เรียกเมื่อเขียนข้อมูลลงพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
- __get() - เรียกเมื่ออ่านข้อมูลจากพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
- __isset() - เรียกเมื่อใช้ isset() หรือ empty() กับพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
- __unset() - เรียกเมื่อใช้ unset() กับพร็อพเพอร์ตีที่เข้าถึงไม่ได้หรือไม่มีอยู่
Method Overloading Methods
public __call ( string $name , array $arguments ) : mixed public static __callStatic ( string $name , array $arguments ) : mixed
- __call() - เรียกเมื่อเรียกเมธอดที่เข้าถึงไม่ได้ใน Object Context
- __callStatic() - เรียกเมื่อเรียกเมธอดที่เข้าถึงไม่ได้ใน Static Context
ข้อควรจำ
- Magic Methods ต้องเป็น
publicเสมอ - ชื่อเมธอดเป็น Reserved Words ห้ามนำไปใช้อื่น
- ทำงานแบบ Interceptor - เรียกอัตโนมัติเมื่อเงื่อนไขตรงตามที่กำหนด